diff options
author | durgadoss.r@intel.com <durgadoss.r@intel.com> | 2013-10-04 18:23:24 +0200 |
---|---|---|
committer | Zhang Rui <rui.zhang@intel.com> | 2013-10-09 05:53:59 +0200 |
commit | c32a5087b70a6706ebee70c4a56849f89c0503f7 (patch) | |
tree | 4c2b92d64aea039476a8ec567a92d376c7656cf5 | |
parent | mm: Place preemption point in do_mlockall() loop (diff) | |
download | linux-c32a5087b70a6706ebee70c4a56849f89c0503f7.tar.xz linux-c32a5087b70a6706ebee70c4a56849f89c0503f7.zip |
Thermal: Tidy up error handling in powerclamp_init
This patch
* adds missing kfree() for cpu_clamping_mask
* adds return value checking for alloc_percpu()
* unregister hotcpu notifier in exit path
Signed-off-by: Durgadoss R <durgadoss.r@intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
-rw-r--r-- | drivers/thermal/intel_powerclamp.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/drivers/thermal/intel_powerclamp.c b/drivers/thermal/intel_powerclamp.c index b40b37cd25e0..a7cd170b86d2 100644 --- a/drivers/thermal/intel_powerclamp.c +++ b/drivers/thermal/intel_powerclamp.c @@ -758,21 +758,39 @@ static int powerclamp_init(void) /* probe cpu features and ids here */ retval = powerclamp_probe(); if (retval) - return retval; + goto exit_free; + /* set default limit, maybe adjusted during runtime based on feedback */ window_size = 2; register_hotcpu_notifier(&powerclamp_cpu_notifier); + powerclamp_thread = alloc_percpu(struct task_struct *); + if (!powerclamp_thread) { + retval = -ENOMEM; + goto exit_unregister; + } + cooling_dev = thermal_cooling_device_register("intel_powerclamp", NULL, &powerclamp_cooling_ops); - if (IS_ERR(cooling_dev)) - return -ENODEV; + if (IS_ERR(cooling_dev)) { + retval = -ENODEV; + goto exit_free_thread; + } if (!duration) duration = jiffies_to_msecs(DEFAULT_DURATION_JIFFIES); + powerclamp_create_debug_files(); return 0; + +exit_free_thread: + free_percpu(powerclamp_thread); +exit_unregister: + unregister_hotcpu_notifier(&powerclamp_cpu_notifier); +exit_free: + kfree(cpu_clamping_mask); + return retval; } module_init(powerclamp_init); |