cpufreq / stats: fix race between stats allocation and first usage
[cascardo/linux.git] / drivers / cpufreq / cpufreq_stats.c
index e40e508..9d7732b 100644 (file)
@@ -364,18 +364,21 @@ static int __init cpufreq_stats_init(void)
        if (ret)
                return ret;
 
+       register_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
+       for_each_online_cpu(cpu)
+               cpufreq_update_policy(cpu);
+
        ret = cpufreq_register_notifier(&notifier_trans_block,
                                CPUFREQ_TRANSITION_NOTIFIER);
        if (ret) {
                cpufreq_unregister_notifier(&notifier_policy_block,
                                CPUFREQ_POLICY_NOTIFIER);
+               unregister_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
+               for_each_online_cpu(cpu)
+                       cpufreq_stats_free_table(cpu);
                return ret;
        }
 
-       register_hotcpu_notifier(&cpufreq_stat_cpu_notifier);
-       for_each_online_cpu(cpu) {
-               cpufreq_update_policy(cpu);
-       }
        return 0;
 }
 static void __exit cpufreq_stats_exit(void)