aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2014-12-09 23:15:34 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-12-10 16:18:34 -0500
commit07cce74a7b259cb90029530e9549bf1d9a1b1c34 (patch)
tree856337b31922ce8d57bd341c2e6860e18ff27001
parent29df0ee1b14ab5cdc83c225258f42600825f45b2 (diff)
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>
-rw-r--r--drivers/base/power/opp.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index 525ffb202d77..1150b9d2e012 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -386,6 +386,27 @@ struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev,
386} 386}
387EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor); 387EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor);
388 388
389static struct device_opp *add_device_opp(struct device *dev)
390{
391 struct device_opp *dev_opp;
392
393 /*
394 * Allocate a new device OPP table. In the infrequent case where a new
395 * device is needed to be added, we pay this penalty.
396 */
397 dev_opp = kzalloc(sizeof(*dev_opp), GFP_KERNEL);
398 if (!dev_opp)
399 return NULL;
400
401 dev_opp->dev = dev;
402 srcu_init_notifier_head(&dev_opp->srcu_head);
403 INIT_LIST_HEAD(&dev_opp->opp_list);
404
405 /* Secure the device list modification */
406 list_add_rcu(&dev_opp->node, &dev_opp_list);
407 return dev_opp;
408}
409
389static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq, 410static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
390 unsigned long u_volt, bool dynamic) 411 unsigned long u_volt, bool dynamic)
391{ 412{
@@ -412,27 +433,13 @@ static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq,
412 /* Check for existing list for 'dev' */ 433 /* Check for existing list for 'dev' */
413 dev_opp = find_device_opp(dev); 434 dev_opp = find_device_opp(dev);
414 if (IS_ERR(dev_opp)) { 435 if (IS_ERR(dev_opp)) {
415 /* 436 dev_opp = add_device_opp(dev);
416 * Allocate a new device OPP table. In the infrequent case
417 * where a new device is needed to be added, we pay this
418 * penalty.
419 */
420 dev_opp = kzalloc(sizeof(struct device_opp), GFP_KERNEL);
421 if (!dev_opp) { 437 if (!dev_opp) {
422 mutex_unlock(&dev_opp_list_lock); 438 mutex_unlock(&dev_opp_list_lock);
423 kfree(new_opp); 439 kfree(new_opp);
424 dev_warn(dev,
425 "%s: Unable to create device OPP structure\n",
426 __func__);
427 return -ENOMEM; 440 return -ENOMEM;
428 } 441 }
429 442
430 dev_opp->dev = dev;
431 srcu_init_notifier_head(&dev_opp->srcu_head);
432 INIT_LIST_HEAD(&dev_opp->opp_list);
433
434 /* Secure the device list modification */
435 list_add_rcu(&dev_opp->node, &dev_opp_list);
436 head = &dev_opp->opp_list; 443 head = &dev_opp->opp_list;
437 goto list_add; 444 goto list_add;
438 } 445 }