diff options
Diffstat (limited to 'kernel/params.c')
| -rw-r--r-- | kernel/params.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/kernel/params.c b/kernel/params.c index ed72e1330862..22df3e0d142a 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -225,8 +225,8 @@ int parse_args(const char *name,  		int ret;						\  									\  		ret = strtolfn(val, 0, &l);				\ -		if (ret == -EINVAL || ((type)l != l))			\ -			return -EINVAL;					\ +		if (ret < 0 || ((type)l != l))				\ +			return ret < 0 ? ret : -EINVAL;			\  		*((type *)kp->arg) = l;					\  		return 0;						\  	}								\ @@ -511,7 +511,7 @@ struct module_param_attrs  #define to_param_attr(n) container_of(n, struct param_attribute, mattr)  static ssize_t param_attr_show(struct module_attribute *mattr, -			       struct module *mod, char *buf) +			       struct module_kobject *mk, char *buf)  {  	int count;  	struct param_attribute *attribute = to_param_attr(mattr); @@ -531,7 +531,7 @@ static ssize_t param_attr_show(struct module_attribute *mattr,  /* sysfs always hands a nul-terminated string in buf.  We rely on that. */  static ssize_t param_attr_store(struct module_attribute *mattr, -				struct module *owner, +				struct module_kobject *km,  				const char *buf, size_t len)  {   	int err; @@ -730,6 +730,10 @@ static struct module_kobject * __init locate_module_kobject(const char *name)  		mk->kobj.kset = module_kset;  		err = kobject_init_and_add(&mk->kobj, &module_ktype, NULL,  					   "%s", name); +#ifdef CONFIG_MODULES +		if (!err) +			err = sysfs_create_file(&mk->kobj, &module_uevent.attr); +#endif  		if (err) {  			kobject_put(&mk->kobj);  			printk(KERN_ERR @@ -807,7 +811,7 @@ static void __init param_sysfs_builtin(void)  }  ssize_t __modver_version_show(struct module_attribute *mattr, -			      struct module *mod, char *buf) +			      struct module_kobject *mk, char *buf)  {  	struct module_version_attribute *vattr =  		container_of(mattr, struct module_version_attribute, mattr); @@ -852,7 +856,7 @@ static ssize_t module_attr_show(struct kobject *kobj,  	if (!attribute->show)  		return -EIO; -	ret = attribute->show(attribute, mk->mod, buf); +	ret = attribute->show(attribute, mk, buf);  	return ret;  } @@ -871,7 +875,7 @@ static ssize_t module_attr_store(struct kobject *kobj,  	if (!attribute->store)  		return -EIO; -	ret = attribute->store(attribute, mk->mod, buf, len); +	ret = attribute->store(attribute, mk, buf, len);  	return ret;  }  |