aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordurgadoss.r@intel.com <durgadoss.r@intel.com>2013-10-04 12:23:24 -0400
committerZhang Rui <rui.zhang@intel.com>2013-10-08 23:53:59 -0400
commitc32a5087b70a6706ebee70c4a56849f89c0503f7 (patch)
tree4c2b92d64aea039476a8ec567a92d376c7656cf5
parent22356f447ceb8d97a4885792e7d9e4607f712e1b (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.c24
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
787exit_free_thread:
788 free_percpu(powerclamp_thread);
789exit_unregister:
790 unregister_hotcpu_notifier(&powerclamp_cpu_notifier);
791exit_free:
792 kfree(cpu_clamping_mask);
793 return retval;
776} 794}
777module_init(powerclamp_init); 795module_init(powerclamp_init);
778 796