Merge branch 'upstream/android-3.10' into linaro-fixes/android-3.10
[firefly-linux-kernel-4.4.55.git] / drivers / cpufreq / cpufreq_stats.c
index fb65decffa28128ded8817441b2e5eff8ecad8e3..2ccfaed7d8441076f14a6e44c7e619a5067e411b 100644 (file)
@@ -341,6 +341,27 @@ static int cpufreq_stat_notifier_trans(struct notifier_block *nb,
        return 0;
 }
 
+static int cpufreq_stats_create_table_cpu(unsigned int cpu)
+{
+       struct cpufreq_policy *policy;
+       struct cpufreq_frequency_table *table;
+       int ret = -ENODEV;
+
+       policy = cpufreq_cpu_get(cpu);
+       if (!policy)
+               return -ENODEV;
+
+       table = cpufreq_frequency_get_table(cpu);
+       if (!table)
+               goto out;
+
+       ret = cpufreq_stats_create_table(policy, table);
+
+out:
+       cpufreq_cpu_put(policy);
+       return ret;
+}
+
 static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
                                               unsigned long action,
                                               void *hcpu)
@@ -361,6 +382,10 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
                cpufreq_stats_free_sysfs(cpu);
                cpufreq_stats_free_table(cpu);
                break;
+       case CPU_DOWN_FAILED:
+       case CPU_DOWN_FAILED_FROZEN:
+               cpufreq_stats_create_table_cpu(cpu);
+               break;
        }
        return NOTIFY_OK;
 }