Commit 0dc3fd02 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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
parents 93b05cba 22e66956
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -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))	\
+32 −32
Original line number Original line Diff line number Diff line
@@ -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];
};
};
@@ -146,18 +145,20 @@ extern const struct gtype##_id __mod_##gtype##_table \
  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)
@@ -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 *,


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);
+2 −4
Original line number Original line Diff line number Diff line
@@ -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;
+9 −16
Original line number Original line Diff line number Diff line
@@ -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,
	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)
{
{