提交 0dc3fd02 编写于 作者: L Linus Torvalds

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
...@@ -59,6 +59,7 @@ extern struct module __this_module; ...@@ -59,6 +59,7 @@ extern struct module __this_module;
static const char __kstrtab_##sym[] \ static const char __kstrtab_##sym[] \
__attribute__((section("__ksymtab_strings"), aligned(1))) \ __attribute__((section("__ksymtab_strings"), aligned(1))) \
= VMLINUX_SYMBOL_STR(sym); \ = VMLINUX_SYMBOL_STR(sym); \
extern const struct kernel_symbol __ksymtab_##sym; \
__visible const struct kernel_symbol __ksymtab_##sym \ __visible const struct kernel_symbol __ksymtab_##sym \
__used \ __used \
__attribute__((section("___ksymtab" sec "+" #sym), unused)) \ __attribute__((section("___ksymtab" sec "+" #sym), unused)) \
......
...@@ -29,8 +29,7 @@ ...@@ -29,8 +29,7 @@
#define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN #define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN
struct modversion_info struct modversion_info {
{
unsigned long crc; unsigned long crc;
char name[MODULE_NAME_LEN]; char name[MODULE_NAME_LEN];
}; };
...@@ -84,12 +83,12 @@ void sort_main_extable(void); ...@@ -84,12 +83,12 @@ void sort_main_extable(void);
void trim_init_extable(struct module *m); void trim_init_extable(struct module *m);
#ifdef MODULE #ifdef MODULE
#define MODULE_GENERIC_TABLE(gtype,name) \ #define MODULE_GENERIC_TABLE(gtype, name) \
extern const struct gtype##_id __mod_##gtype##_table \ extern const struct gtype##_id __mod_##gtype##_table \
__attribute__ ((unused, alias(__stringify(name)))) __attribute__ ((unused, alias(__stringify(name))))
#else /* !MODULE */ #else /* !MODULE */
#define MODULE_GENERIC_TABLE(gtype,name) #define MODULE_GENERIC_TABLE(gtype, name)
#endif #endif
/* Generic info of form tag = "info" */ /* Generic info of form tag = "info" */
...@@ -126,7 +125,7 @@ extern const struct gtype##_id __mod_##gtype##_table \ ...@@ -126,7 +125,7 @@ extern const struct gtype##_id __mod_##gtype##_table \
* is a GPL combined work. * is a GPL combined work.
* *
* This exists for several reasons * 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 * is free
* 2. So the community can ignore bug reports including proprietary modules * 2. So the community can ignore bug reports including proprietary modules
* 3. So vendors can do likewise based on their own policies * 3. So vendors can do likewise based on their own policies
...@@ -138,27 +137,29 @@ extern const struct gtype##_id __mod_##gtype##_table \ ...@@ -138,27 +137,29 @@ extern const struct gtype##_id __mod_##gtype##_table \
* authors use multiple MODULE_AUTHOR() statements/lines. * authors use multiple MODULE_AUTHOR() statements/lines.
*/ */
#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
/* What your module does. */ /* What your module does. */
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description) #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
#define MODULE_DEVICE_TABLE(type,name) \ #define MODULE_DEVICE_TABLE(type, name) \
MODULE_GENERIC_TABLE(type##_device,name) MODULE_GENERIC_TABLE(type##_device, name)
/* Version of form [<epoch>:]<version>[-<extra-version>]. /* Version of form [<epoch>:]<version>[-<extra-version>].
Or for CVS/RCS ID version, everything but the number is stripped. * Or for CVS/RCS ID version, everything but the number is stripped.
<epoch>: A (small) unsigned integer which allows you to start versions * <epoch>: A (small) unsigned integer which allows you to start versions
anew. If not mentioned, it's zero. eg. "2:1.0" is after * anew. If not mentioned, it's zero. eg. "2:1.0" is after
"1:2.0". * "1:2.0".
<version>: The <version> may contain only alphanumerics and the
character `.'. Ordered by numeric sort for numeric parts, * <version>: The <version> may contain only alphanumerics and the
ascii sort for ascii parts (as per RPM or DEB algorithm). * character `.'. Ordered by numeric sort for numeric parts,
<extraversion>: Like <version>, but inserted for local * ascii sort for ascii parts (as per RPM or DEB algorithm).
customizations, eg "rh3" or "rusty1".
* <extraversion>: Like <version>, but inserted for local
Using this automatically adds a checksum of the .c files and the * customizations, eg "rh3" or "rusty1".
local headers in "srcversion".
*/ * Using this automatically adds a checksum of the .c files and the
* local headers in "srcversion".
*/
#if defined(MODULE) || !defined(CONFIG_SYSFS) #if defined(MODULE) || !defined(CONFIG_SYSFS)
#define MODULE_VERSION(_version) MODULE_INFO(version, _version) #define MODULE_VERSION(_version) MODULE_INFO(version, _version)
...@@ -226,8 +227,7 @@ struct module_ref { ...@@ -226,8 +227,7 @@ struct module_ref {
unsigned long decs; unsigned long decs;
} __attribute((aligned(2 * sizeof(unsigned long)))); } __attribute((aligned(2 * sizeof(unsigned long))));
struct module struct module {
{
enum module_state state; enum module_state state;
/* Member of list of modules */ /* Member of list of modules */
...@@ -451,7 +451,7 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, ...@@ -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) extern void __module_put_and_exit(struct module *mod, long code)
__attribute__((noreturn)); __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 #ifdef CONFIG_MODULE_UNLOAD
unsigned long module_refcount(struct module *mod); unsigned long module_refcount(struct module *mod);
...@@ -480,8 +480,8 @@ static inline void module_put(struct module *module) ...@@ -480,8 +480,8 @@ static inline void module_put(struct module *module)
static inline void __module_get(struct module *module) static inline void __module_get(struct module *module)
{ {
} }
#define symbol_put(x) do { } while(0) #define symbol_put(x) do { } while (0)
#define symbol_put_addr(p) do { } while(0) #define symbol_put_addr(p) do { } while (0)
#endif /* CONFIG_MODULE_UNLOAD */ #endif /* CONFIG_MODULE_UNLOAD */
int ref_module(struct module *a, struct module *b); 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 ...@@ -507,8 +507,8 @@ int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned
/* For extable.c to search modules' exception tables. */ /* For extable.c to search modules' exception tables. */
const struct exception_table_entry *search_module_extables(unsigned long addr); const struct exception_table_entry *search_module_extables(unsigned long addr);
int register_module_notifier(struct notifier_block * nb); int register_module_notifier(struct notifier_block *nb);
int unregister_module_notifier(struct notifier_block * nb); int unregister_module_notifier(struct notifier_block *nb);
extern void print_modules(void); extern void print_modules(void);
...@@ -548,8 +548,8 @@ static inline bool is_module_text_address(unsigned long addr) ...@@ -548,8 +548,8 @@ static inline bool is_module_text_address(unsigned long addr)
/* Get/put a kernel symbol (calls should be symmetric) */ /* Get/put a kernel symbol (calls should be symmetric) */
#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); }) #define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); })
#define symbol_put(x) do { } while(0) #define symbol_put(x) do { } while (0)
#define symbol_put_addr(x) do { } while(0) #define symbol_put_addr(x) do { } while (0)
static inline void __module_get(struct module *module) 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 *, ...@@ -606,13 +606,13 @@ static inline int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
return 0; 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 */ /* no events will happen anyway, so this can always succeed */
return 0; return 0;
} }
static inline int unregister_module_notifier(struct notifier_block * nb) static inline int unregister_module_notifier(struct notifier_block *nb)
{ {
return 0; return 0;
} }
......
...@@ -815,10 +815,8 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, ...@@ -815,10 +815,8 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
return -EFAULT; return -EFAULT;
name[MODULE_NAME_LEN-1] = '\0'; name[MODULE_NAME_LEN-1] = '\0';
if (!(flags & O_NONBLOCK)) { if (!(flags & O_NONBLOCK))
printk(KERN_WARNING pr_warn("waiting module removal not supported: please upgrade\n");
"waiting module removal not supported: please upgrade");
}
if (mutex_lock_interruptible(&module_mutex) != 0) if (mutex_lock_interruptible(&module_mutex) != 0)
return -EINTR; return -EINTR;
......
...@@ -227,17 +227,10 @@ int parse_args(const char *doing, ...@@ -227,17 +227,10 @@ int parse_args(const char *doing,
} }
/* Lazy bastard, eh? */ /* 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) \ int param_set_##name(const char *val, const struct kernel_param *kp) \
{ \ { \
tmptype l; \ return strtolfn(val, 0, (type *)kp->arg); \
int ret; \
\
ret = strtolfn(val, 0, &l); \
if (ret < 0 || ((type)l != l)) \
return ret < 0 ? ret : -EINVAL; \
*((type *)kp->arg) = l; \
return 0; \
} \ } \
int param_get_##name(char *buffer, const struct kernel_param *kp) \ int param_get_##name(char *buffer, const struct kernel_param *kp) \
{ \ { \
...@@ -253,13 +246,13 @@ int parse_args(const char *doing, ...@@ -253,13 +246,13 @@ int parse_args(const char *doing,
EXPORT_SYMBOL(param_ops_##name) EXPORT_SYMBOL(param_ops_##name)
STANDARD_PARAM_DEF(byte, unsigned char, "%hhu", unsigned long, kstrtoul); STANDARD_PARAM_DEF(byte, unsigned char, "%hhu", kstrtou8);
STANDARD_PARAM_DEF(short, short, "%hi", long, kstrtol); STANDARD_PARAM_DEF(short, short, "%hi", kstrtos16);
STANDARD_PARAM_DEF(ushort, unsigned short, "%hu", unsigned long, kstrtoul); STANDARD_PARAM_DEF(ushort, unsigned short, "%hu", kstrtou16);
STANDARD_PARAM_DEF(int, int, "%i", long, kstrtol); STANDARD_PARAM_DEF(int, int, "%i", kstrtoint);
STANDARD_PARAM_DEF(uint, unsigned int, "%u", unsigned long, kstrtoul); STANDARD_PARAM_DEF(uint, unsigned int, "%u", kstrtouint);
STANDARD_PARAM_DEF(long, long, "%li", long, kstrtol); STANDARD_PARAM_DEF(long, long, "%li", kstrtol);
STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", unsigned long, kstrtoul); STANDARD_PARAM_DEF(ulong, unsigned long, "%lu", kstrtoul);
int param_set_charp(const char *val, const struct kernel_param *kp) int param_set_charp(const char *val, const struct kernel_param *kp)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册