diff options
author | durgadoss.r@intel.com <durgadoss.r@intel.com> | 2013-10-04 12:23:24 -0400 |
---|---|---|
committer | Zhang Rui <rui.zhang@intel.com> | 2013-10-08 23:53:59 -0400 |
commit | c32a5087b70a6706ebee70c4a56849f89c0503f7 (patch) | |
tree | 4c2b92d64aea039476a8ec567a92d376c7656cf5 | |
parent | 22356f447ceb8d97a4885792e7d9e4607f712e1b (diff) |
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) | |||
758 | /* probe cpu features and ids here */ | 758 | /* probe cpu features and ids here */ |
759 | retval = powerclamp_probe(); | 759 | retval = powerclamp_probe(); |
760 | if (retval) | 760 | if (retval) |
761 | return retval; | 761 | goto exit_free; |
762 | |||
762 | /* set default limit, maybe adjusted during runtime based on feedback */ | 763 | /* set default limit, maybe adjusted during runtime based on feedback */ |
763 | window_size = 2; | 764 | window_size = 2; |
764 | register_hotcpu_notifier(&powerclamp_cpu_notifier); | 765 | register_hotcpu_notifier(&powerclamp_cpu_notifier); |
766 | |||
765 | powerclamp_thread = alloc_percpu(struct task_struct *); | 767 | powerclamp_thread = alloc_percpu(struct task_struct *); |
768 | if (!powerclamp_thread) { | ||
769 | retval = -ENOMEM; | ||
770 | goto exit_unregister; | ||
771 | } | ||
772 | |||
766 | cooling_dev = thermal_cooling_device_register("intel_powerclamp", NULL, | 773 | cooling_dev = thermal_cooling_device_register("intel_powerclamp", NULL, |
767 | &powerclamp_cooling_ops); | 774 | &powerclamp_cooling_ops); |
768 | if (IS_ERR(cooling_dev)) | 775 | if (IS_ERR(cooling_dev)) { |
769 | return -ENODEV; | 776 | retval = -ENODEV; |
777 | goto exit_free_thread; | ||
778 | } | ||
770 | 779 | ||
771 | if (!duration) | 780 | if (!duration) |
772 | duration = jiffies_to_msecs(DEFAULT_DURATION_JIFFIES); | 781 | duration = jiffies_to_msecs(DEFAULT_DURATION_JIFFIES); |
782 | |||
773 | powerclamp_create_debug_files(); | 783 | powerclamp_create_debug_files(); |
774 | 784 | ||
775 | return 0; | 785 | return 0; |
786 | |||
787 | exit_free_thread: | ||
788 | free_percpu(powerclamp_thread); | ||
789 | exit_unregister: | ||
790 | unregister_hotcpu_notifier(&powerclamp_cpu_notifier); | ||
791 | exit_free: | ||
792 | kfree(cpu_clamping_mask); | ||
793 | return retval; | ||
776 | } | 794 | } |
777 | module_init(powerclamp_init); | 795 | module_init(powerclamp_init); |
778 | 796 | ||