Commit 45fcc70c authored by Rusty Russell's avatar Rusty Russell

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: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 9a71af2c
...@@ -36,9 +36,13 @@ typedef int (*param_set_fn)(const char *val, struct kernel_param *kp); ...@@ -36,9 +36,13 @@ typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
/* Returns length written or -errno. Buffer is 4k (ie. be short!) */ /* Returns length written or -errno. Buffer is 4k (ie. be short!) */
typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
/* Flag bits for kernel_param.flags */
#define KPARAM_KMALLOCED 1
struct kernel_param { struct kernel_param {
const char *name; const char *name;
unsigned int perm; u16 perm;
u16 flags;
param_set_fn set; param_set_fn set;
param_get_fn get; param_get_fn get;
union { union {
...@@ -88,7 +92,7 @@ struct kparam_array ...@@ -88,7 +92,7 @@ struct kparam_array
static struct kernel_param __moduleparam_const __param_##name \ static struct kernel_param __moduleparam_const __param_##name \
__used \ __used \
__attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
= { __param_str_##name, perm, set, get, { arg } } = { __param_str_##name, perm, 0, set, get, { arg } }
#define module_param_call(name, set, get, arg, perm) \ #define module_param_call(name, set, get, arg, perm) \
__module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm) __module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm)
......
...@@ -24,9 +24,6 @@ ...@@ -24,9 +24,6 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/slab.h> #include <linux/slab.h>
/* We abuse the high bits of "perm" to record whether we kmalloc'ed. */
#define KPARAM_KMALLOCED 0x80000000
#if 0 #if 0
#define DEBUGP printk #define DEBUGP printk
#else #else
...@@ -220,13 +217,13 @@ int param_set_charp(const char *val, struct kernel_param *kp) ...@@ -220,13 +217,13 @@ int param_set_charp(const char *val, struct kernel_param *kp)
return -ENOSPC; return -ENOSPC;
} }
if (kp->perm & KPARAM_KMALLOCED) if (kp->flags & KPARAM_KMALLOCED)
kfree(*(char **)kp->arg); kfree(*(char **)kp->arg);
/* This is a hack. We can't need to strdup in early boot, and we /* This is a hack. We can't need to strdup in early boot, and we
* don't need to; this mangled commandline is preserved. */ * don't need to; this mangled commandline is preserved. */
if (slab_is_available()) { if (slab_is_available()) {
kp->perm |= KPARAM_KMALLOCED; kp->flags |= KPARAM_KMALLOCED;
*(char **)kp->arg = kstrdup(val, GFP_KERNEL); *(char **)kp->arg = kstrdup(val, GFP_KERNEL);
if (!kp->arg) if (!kp->arg)
return -ENOMEM; return -ENOMEM;
...@@ -591,7 +588,7 @@ void destroy_params(const struct kernel_param *params, unsigned num) ...@@ -591,7 +588,7 @@ void destroy_params(const struct kernel_param *params, unsigned num)
unsigned int i; unsigned int i;
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
if (params[i].perm & KPARAM_KMALLOCED) if (params[i].flags & KPARAM_KMALLOCED)
kfree(*(char **)params[i].arg); kfree(*(char **)params[i].arg);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment