Messages in this thread Patch in this message | | | From | Andreas Gruenbacher <> | Subject | Re: [kbuild 4/5] Include type information as module info where possible | Date | Sun, 30 Jan 2005 23:06:11 +0100 |
| |
On Sunday 30 January 2005 16:56, Sam Ravnborg wrote: > Rusty got the original patch applied.
Not completely. The fix is attached.
Cheers, -- Andreas Gruenbacher <agruen@suse.de> SUSE Labs, SUSE LINUX PRODUCTS GMBH From: Andreas Gruenbacher <agruen@suse.de> Subject: Module parameter type fixes
The wrong version of the parmtype patch was merged, incompletely, and the part that got merged got broken on the way. Here are the fixes:
Move __MODULE_INFO to modparam.h: This macro is used in modparam.h; there are users who include this header but not module.h. The latter includes modparam.h already.
__MODULE_INFO(parmtype, name##type, #name ":" #type) does not evaluate to __MODULE_INFO(parmtype, footype, "foo:int") as was the idea, but to __MODULE_INFO(parmtype, fooint, "foo:int") when type is bound to int. In more complicated cases, we get syntax erros. Re-introduce the __MODULE_PARM_TYPE macro; this is cleaner than renaming the type parameter.
Add the parmtype definition which was dropped during the merge to to the obsolete but still heavily used MODULE_PARM macro.
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Index: linux-2.6.11-rc2-bk8/include/linux/module.h =================================================================== --- linux-2.6.11-rc2-bk8.orig/include/linux/module.h +++ linux-2.6.11-rc2-bk8/include/linux/module.h @@ -77,24 +77,14 @@ void sort_main_extable(void); extern struct subsystem module_subsys; #ifdef MODULE -#define ___module_cat(a,b) __mod_ ## a ## b -#define __module_cat(a,b) ___module_cat(a,b) -#define __MODULE_INFO(tag, name, info) \ -static const char __module_cat(name,__LINE__)[] \ - __attribute_used__ \ - __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info - #define MODULE_GENERIC_TABLE(gtype,name) \ extern const struct gtype##_id __mod_##gtype##_table \ __attribute__ ((unused, alias(__stringify(name)))) extern struct module __this_module; #define THIS_MODULE (&__this_module) - #else /* !MODULE */ - #define MODULE_GENERIC_TABLE(gtype,name) -#define __MODULE_INFO(tag, name, info) #define THIS_MODULE ((struct module *)0) #endif @@ -560,7 +550,8 @@ static inline void MODULE_PARM_(void) { /* DEPRECATED: Do not use. */ #define MODULE_PARM(var,type) \ struct obsolete_modparm __parm_##var __attribute__((section("__obsparm"))) = \ -{ __stringify(var), type, &MODULE_PARM_ }; +{ __stringify(var), type, &MODULE_PARM_ }; \ +__MODULE_PARM_TYPE(var, type); #else #define MODULE_PARM(var,type) static void __attribute__((__unused__)) *__parm_##var = &MODULE_PARM_; #endif Index: linux-2.6.11-rc2-bk8/include/linux/moduleparam.h =================================================================== --- linux-2.6.11-rc2-bk8.orig/include/linux/moduleparam.h +++ linux-2.6.11-rc2-bk8/include/linux/moduleparam.h @@ -13,6 +13,19 @@ #define MODULE_PARAM_PREFIX __stringify(KBUILD_MODNAME) "." #endif +#ifdef MODULE +#define ___module_cat(a,b) __mod_ ## a ## b +#define __module_cat(a,b) ___module_cat(a,b) +#define __MODULE_INFO(tag, name, info) \ +static const char __module_cat(name,__LINE__)[] \ + __attribute_used__ \ + __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info +#else /* !MODULE */ +#define __MODULE_INFO(tag, name, info) +#endif +#define __MODULE_PARM_TYPE(name, _type) \ + __MODULE_INFO(parmtype, name##type, #name ":" _type) + struct kernel_param; /* Returns 0, or -errno. arg is in kp->arg. */ @@ -65,7 +78,7 @@ struct kparam_array #define module_param_named(name, value, type, perm) \ param_check_##type(name, &(value)); \ module_param_call(name, param_set_##type, param_get_##type, &value, perm); \ - __MODULE_INFO(parmtype, name##type, #name ":" #type) + __MODULE_PARM_TYPE(name, #type) #define module_param(name, type, perm) \ module_param_named(name, name, type, perm) @@ -76,7 +89,7 @@ struct kparam_array = { len, string }; \ module_param_call(name, param_set_copystring, param_get_string, \ &__param_string_##name, perm); \ - __MODULE_INFO(parmtype, name##type, #name ":string") + __MODULE_PARM_TYPE(name, "string") /* Called on module insert or kernel boot */ extern int parse_args(const char *name, @@ -138,7 +151,7 @@ extern int param_get_invbool(char *buffe sizeof(array[0]), array }; \ module_param_call(name, param_array_set, param_array_get, \ &__param_arr_##name, perm); \ - __MODULE_INFO(parmtype, name##type, #name ":array of " #type) + __MODULE_PARM_TYPE(name, "array of " #type) #define module_param_array(name, type, nump, perm) \ module_param_array_named(name, name, type, nump, perm) | |