]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/thermal/intel_powerclamp.c
Thermal: Tidy up error handling in powerclamp_init
[karo-tx-linux.git] / drivers / thermal / intel_powerclamp.c
index b40b37cd25e08b7b2353b6ef6d85c321ad2e08eb..a7cd170b86d2d76af806c00c497ed9b8ca62db9a 100644 (file)
@@ -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);