diff options
Diffstat (limited to 'drivers/powercap/powercap_sys.c')
| -rw-r--r-- | drivers/powercap/powercap_sys.c | 17 | 
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c index f0654a932b37..e180dee0f83d 100644 --- a/drivers/powercap/powercap_sys.c +++ b/drivers/powercap/powercap_sys.c @@ -7,6 +7,7 @@  #include <linux/module.h>  #include <linux/device.h>  #include <linux/err.h> +#include <linux/kstrtox.h>  #include <linux/slab.h>  #include <linux/powercap.h> @@ -446,7 +447,7 @@ static ssize_t enabled_store(struct device *dev,  {  	bool mode; -	if (strtobool(buf, &mode)) +	if (kstrtobool(buf, &mode))  		return -EINVAL;  	if (dev->parent) {  		struct powercap_zone *power_zone = to_powercap_zone(dev); @@ -529,9 +530,6 @@ struct powercap_zone *powercap_register_zone(  	power_zone->name = kstrdup(name, GFP_KERNEL);  	if (!power_zone->name)  		goto err_name_alloc; -	dev_set_name(&power_zone->dev, "%s:%x", -					dev_name(power_zone->dev.parent), -					power_zone->id);  	power_zone->constraints = kcalloc(nr_constraints,  					  sizeof(*power_zone->constraints),  					  GFP_KERNEL); @@ -554,9 +552,16 @@ struct powercap_zone *powercap_register_zone(  	power_zone->dev_attr_groups[0] = &power_zone->dev_zone_attr_group;  	power_zone->dev_attr_groups[1] = NULL;  	power_zone->dev.groups = power_zone->dev_attr_groups; +	dev_set_name(&power_zone->dev, "%s:%x", +					dev_name(power_zone->dev.parent), +					power_zone->id);  	result = device_register(&power_zone->dev); -	if (result) -		goto err_dev_ret; +	if (result) { +		put_device(&power_zone->dev); +		mutex_unlock(&control_type->lock); + +		return ERR_PTR(result); +	}  	control_type->nr_zones++;  	mutex_unlock(&control_type->lock);  |