mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 07:31:45 +00:00
PM / OPP: handle allocation of device_opp in a separate routine
Get the 'device_opp' allocation code into a separate routine to keep only the necessary part in dev_pm_opp_add_dynamic(). Also do s/sizeof(struct device_opp)/sizeof(*dev_opp) and remove the print message on kzalloc() failure as checkpatch warns for that. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
29df0ee1b1
commit
07cce74a7b
@ -386,6 +386,27 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
|
||||
|
||||
static struct device_opp *add_device_opp(struct device *dev)
|
||||
{
|
||||
struct device_opp *dev_opp;
|
||||
|
||||
/*
|
||||
* Allocate a new device OPP table. In the infrequent case where a new
|
||||
* device is needed to be added, we pay this penalty.
|
||||
*/
|
||||
dev_opp = kzalloc(sizeof(*dev_opp), GFP_KERNEL);
|
||||
if (!dev_opp)
|
||||
return NULL;
|
||||
|
||||
dev_opp->dev = dev;
|
||||
srcu_init_notifier_head(&dev_opp->srcu_head);
|
||||
INIT_LIST_HEAD(&dev_opp->opp_list);
|
||||
|
||||
/* Secure the device list modification */
|
||||
list_add_rcu(&dev_opp->node, &dev_opp_list);
|
||||
return dev_opp;
|
||||
}
|
||||
|
||||
static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
||||
unsigned long u_volt, bool dynamic)
|
||||
{
|
||||
@ -412,27 +433,13 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
|
||||
/* Check for existing list for 'dev' */
|
||||
dev_opp = find_device_opp(dev);
|
||||
if (IS_ERR(dev_opp)) {
|
||||
/*
|
||||
* Allocate a new device OPP table. In the infrequent case
|
||||
* where a new device is needed to be added, we pay this
|
||||
* penalty.
|
||||
*/
|
||||
dev_opp = kzalloc(sizeof(struct device_opp), GFP_KERNEL);
|
||||
dev_opp = add_device_opp(dev);
|
||||
if (!dev_opp) {
|
||||
mutex_unlock(&dev_opp_list_lock);
|
||||
kfree(new_opp);
|
||||
dev_warn(dev,
|
||||
"%s: Unable to create device OPP structure\n",
|
||||
__func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
dev_opp->dev = dev;
|
||||
srcu_init_notifier_head(&dev_opp->srcu_head);
|
||||
INIT_LIST_HEAD(&dev_opp->opp_list);
|
||||
|
||||
/* Secure the device list modification */
|
||||
list_add_rcu(&dev_opp->node, &dev_opp_list);
|
||||
head = &dev_opp->opp_list;
|
||||
goto list_add;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user