module_param: split perm field into flags and perm
Impact: cleanup Rather than hack KPARAM_KMALLOCED into the perm field, separate it out. Since the perm field was 32 bits and only needs 16, we don't add bloat. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -24,9 +24,6 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
/* We abuse the high bits of "perm" to record whether we kmalloc'ed. */
|
||||
#define KPARAM_KMALLOCED 0x80000000
|
||||
|
||||
#if 0
|
||||
#define DEBUGP printk
|
||||
#else
|
||||
@@ -220,13 +217,13 @@ int param_set_charp(const char *val, struct kernel_param *kp)
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
if (kp->perm & KPARAM_KMALLOCED)
|
||||
if (kp->flags & KPARAM_KMALLOCED)
|
||||
kfree(*(char **)kp->arg);
|
||||
|
||||
/* This is a hack. We can't need to strdup in early boot, and we
|
||||
* don't need to; this mangled commandline is preserved. */
|
||||
if (slab_is_available()) {
|
||||
kp->perm |= KPARAM_KMALLOCED;
|
||||
kp->flags |= KPARAM_KMALLOCED;
|
||||
*(char **)kp->arg = kstrdup(val, GFP_KERNEL);
|
||||
if (!kp->arg)
|
||||
return -ENOMEM;
|
||||
@@ -591,7 +588,7 @@ void destroy_params(const struct kernel_param *params, unsigned num)
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
if (params[i].perm & KPARAM_KMALLOCED)
|
||||
if (params[i].flags & KPARAM_KMALLOCED)
|
||||
kfree(*(char **)params[i].arg);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user