diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-22 22:30:15 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-22 22:30:15 -0800 |
commit | 0dc3fd0249a295863900984e02dd4bb89204205b (patch) | |
tree | 28cd9abe399ae09073875b2ef90503ee255b5c52 | |
parent | 93b05cba8ed52a751da9c4c7da6c97bc514bec77 (diff) | |
parent | 22e669568d5195af10bd2f404f9c1809541ad77b (diff) | |
download | op-kernel-dev-0dc3fd0249a295863900984e02dd4bb89204205b.zip op-kernel-dev-0dc3fd0249a295863900984e02dd4bb89204205b.tar.gz |
Merge tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
Pull module updates from Rusty Russell.
* tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux:
module: Add missing newline in printk call.
module: fix coding style
export: declare ksymtab symbols
module.h: Remove unnecessary semicolon
params: improve standard definitions
Add Documentation/module-signing.txt file
-rw-r--r-- | include/linux/export.h | 1 | ||||
-rw-r--r-- | include/linux/module.h | 64 | ||||
-rw-r--r-- | kernel/module.c | 6 | ||||
-rw-r--r-- | kernel/params.c | 25 |
4 files changed, 44 insertions, 52 deletions
diff --git a/include/linux/export.h b/include/linux/export.h index 3f2793d..96e45ea 100644 --- a/include/linux/export.h +++ b/include/linux/export.h @@ -59,6 +59,7 @@ extern struct module __this_module; static const char __kstrtab_##sym[] \ __attribute__((section("__ksymtab_strings"), aligned(1))) \ = VMLINUX_SYMBOL_STR(sym); \ + extern const struct kernel_symbol __ksymtab_##sym; \ __visible const struct kernel_symbol __ksymtab_##sym \ __used \ __attribute__((section("___ksymtab" sec "+" #sym), unused)) \ diff --git a/include/linux/module.h b/include/linux/module.h index 15cd6b1..eaf60ff 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -29,8 +29,7 @@ #define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN -struct modversion_info -{ +struct modversion_info { unsigned long crc; char name[MODULE_NAME_LEN]; }; @@ -84,12 +83,12 @@ void sort_main_extable(void); void trim_init_extable(struct module *m); #ifdef MODULE -#define MODULE_GENERIC_TABLE(gtype,name) \ +#define MODULE_GENERIC_TABLE(gtype, name) \ extern const struct gtype##_id __mod_##gtype##_table \ __attribute__ ((unused, alias(__stringify(name)))) #else /* !MODULE */ -#define MODULE_GENERIC_TABLE(gtype,name) +#define MODULE_GENERIC_TABLE(gtype, name) #endif /* Generic info of form tag = "info" */ @@ -126,7 +125,7 @@ extern const struct gtype##_id __mod_##gtype##_table \ * is a GPL combined work. * * This exists for several reasons - * 1. So modinfo can show license info for users wanting to vet their setup + * 1. So modinfo can show license info for users wanting to vet their setup * is free * 2. So the community can ignore bug reports including proprietary modules * 3. So vendors can do likewise based on their own policies @@ -138,27 +137,29 @@ extern const struct gtype##_id __mod_##gtype##_table \ * authors use multiple MODULE_AUTHOR() statements/lines. */ #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) - + /* What your module does. */ #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description) -#define MODULE_DEVICE_TABLE(type,name) \ - MODULE_GENERIC_TABLE(type##_device,name) +#define MODULE_DEVICE_TABLE(type, name) \ + MODULE_GENERIC_TABLE(type##_device, name) /* Version of form [<epoch>:]<version>[-<extra-version>]. - Or for CVS/RCS ID version, everything but the number is stripped. - <epoch>: A (small) unsigned integer which allows you to start versions - anew. If not mentioned, it's zero. eg. "2:1.0" is after - "1:2.0". - <version>: The <version> may contain only alphanumerics and the - character `.'. Ordered by numeric sort for numeric parts, - ascii sort for ascii parts (as per RPM or DEB algorithm). - <extraversion>: Like <version>, but inserted for local - customizations, eg "rh3" or "rusty1". - - Using this automatically adds a checksum of the .c files and the - local headers in "srcversion". -*/ + * Or for CVS/RCS ID version, everything but the number is stripped. + * <epoch>: A (small) unsigned integer which allows you to start versions + * anew. If not mentioned, it's zero. eg. "2:1.0" is after + * "1:2.0". + + * <version>: The <version> may contain only alphanumerics and the + * character `.'. Ordered by numeric sort for numeric parts, + * ascii sort for ascii parts (as per RPM or DEB algorithm). + + * <extraversion>: Like <version>, but inserted for local + * customizations, eg "rh3" or "rusty1". + + * Using this automatically adds a checksum of the .c files and the + * local headers in "srcversion". + */ #if defined(MODULE) || !defined(CONFIG_SYSFS) #define MODULE_VERSION(_version) MODULE_INFO(version, _version) @@ -226,8 +227,7 @@ struct module_ref { unsigned long decs; } __attribute((aligned(2 * sizeof(unsigned long)))); -struct module -{ +struct module { enum module_state state; /* Member of list of modules */ @@ -451,7 +451,7 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, extern void __module_put_and_exit(struct module *mod, long code) __attribute__((noreturn)); -#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code); +#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code) #ifdef CONFIG_MODULE_UNLOAD unsigned long module_refcount(struct module *mod); @@ -480,8 +480,8 @@ static inline void module_put(struct module *module) static inline void __module_get(struct module *module) { } -#define symbol_put(x) do { } while(0) -#define symbol_put_addr(p) do { } while(0) +#define symbol_put(x) do { } while (0) +#define symbol_put_addr(p) do { } while (0) #endif /* CONFIG_MODULE_UNLOAD */ int ref_module(struct module *a, struct module *b); @@ -507,8 +507,8 @@ int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned /* For extable.c to search modules' exception tables. */ const struct exception_table_entry *search_module_extables(unsigned long addr); -int register_module_notifier(struct notifier_block * nb); -int unregister_module_notifier(struct notifier_block * nb); +int register_module_notifier(struct notifier_block *nb); +int unregister_module_notifier(struct notifier_block *nb); extern void print_modules(void); @@ -548,8 +548,8 @@ static inline bool is_module_text_address(unsigned long addr) /* Get/put a kernel symbol (calls should be symmetric) */ #define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); }) -#define symbol_put(x) do { } while(0) -#define symbol_put_addr(x) do { } while(0) +#define symbol_put(x) do { } while (0) +#define symbol_put_addr(x) do { } while (0) static inline void __module_get(struct module *module) { @@ -606,13 +606,13 @@ static inline int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, return 0; } -static inline int register_module_notifier(struct notifier_block * nb) +static inline int register_module_notifier(struct notifier_block *nb) { /* no events will happen anyway, so this can always succeed */ return 0; } -static inline int unregister_module_notifier(struct notifier_block * nb) +static inline int unregister_module_notifier(struct notifier_block *nb) { return 0; } diff --git a/kernel/module.c b/kernel/module.c index f5a3b1e..d24fcf2 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -815,10 +815,8 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, return -EFAULT; name[MODULE_NAME_LEN-1] = '\0'; - if (!(flags & O_NONBLOCK)) { - printk(KERN_WARNING - "waiting module removal not supported: please upgrade"); - } + if (!(flags & O_NONBLOCK)) + pr_warn("waiting module removal not supported: please upgrade\n"); if (mutex_lock_interruptible(&module_mutex) != 0) return -EINTR; diff --git a/kernel/params.c b/kernel/params.c index c00d5b5..b00142e 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -227,17 +227,10 @@ int parse_args(const char *doing, } /* Lazy bastard, eh? */ -#define STANDARD_PARAM_DEF(name, type, format, tmptype, strtolfn) \ +#define STANDARD_PARAM_DEF(name, type, format, strtolfn) \ int param_set_##name(const char *val, const struct kernel_param *kp) \ { \ - tmptype l; \ - int ret; \ - \ - ret = strtolfn(val, 0, &l); \ - if (ret < 0 || ((type)l != l)) \ - return ret < 0 ? ret : -EINVAL; \ - *((type *)kp->arg) = l; \ - return 0; \ + return strtolfn(val, 0, (type *)kp->arg); \ } \ int param_get_##name(char *buffer, const struct kernel_param *kp) \ { \ @@ -253,13 +246,13 @@ int parse_args(const char *doing, EXPORT_SYMBOL(param_ops_##name) -STANDARD_PARAM_DEF(byte, unsigned char, "%hhu", unsigned long, kstrtoul); -STANDARD_PARAM_DEF(short, short, "%hi", long, kstrtol); -STANDARD_PARAM_DEF(ushort, unsigned short, "%hu", unsigned long, kstrtoul); -STANDARD_PARAM_DEF(int, int, "%i", long, kstrtol); -STANDARD_PARAM_DEF(uint, unsigned int, "%u", unsigned long, kstrtoul); -STANDARD_PARAM_DEF(long, long, "%li", long, kstrtol); -STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", unsigned long, kstrtoul); +STANDARD_PARAM_DEF(byte, unsigned char, "%hhu", kstrtou8); +STANDARD_PARAM_DEF(short, short, "%hi", kstrtos16); +STANDARD_PARAM_DEF(ushort, unsigned short, "%hu", kstrtou16); +STANDARD_PARAM_DEF(int, int, "%i", kstrtoint); +STANDARD_PARAM_DEF(uint, unsigned int, "%u", kstrtouint); +STANDARD_PARAM_DEF(long, long, "%li", kstrtol); +STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", kstrtoul); int param_set_charp(const char *val, const struct kernel_param *kp) { |