diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2014-12-09 23:15:34 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-12-10 16:18:34 -0500 |
commit | 07cce74a7b259cb90029530e9549bf1d9a1b1c34 (patch) | |
tree | 856337b31922ce8d57bd341c2e6860e18ff27001 | |
parent | 29df0ee1b14ab5cdc83c225258f42600825f45b2 (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.c | 37 |
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 | } |
387 | EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor); | 387 | EXPORT_SYMBOL_GPL(dev_pm_opp_find_freq_floor); |
388 | 388 | ||
389 | static 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 | |||
389 | static int dev_pm_opp_add_dynamic(struct device *dev, unsigned long freq, | 410 | static 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 | } |