diff options
-rw-r--r-- | arch/powerpc/platforms/cell/cbe_cpufreq.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/arch/powerpc/platforms/cell/cbe_cpufreq.c b/arch/powerpc/platforms/cell/cbe_cpufreq.c index 5820fb9a452..3a26b3c115b 100644 --- a/arch/powerpc/platforms/cell/cbe_cpufreq.c +++ b/arch/powerpc/platforms/cell/cbe_cpufreq.c @@ -196,10 +196,9 @@ static int pmi_notifier(struct notifier_block *nb, { struct cpufreq_policy *policy = data; - if (event != CPUFREQ_INCOMPATIBLE) - return 0; + if (pmi_frequency_limit) + cpufreq_verify_within_limits(policy, 0, pmi_frequency_limit); - cpufreq_verify_within_limits(policy, 0, pmi_frequency_limit); return 0; } @@ -263,11 +262,6 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy) cpufreq_frequency_table_get_attr(cbe_freqs, policy->cpu); - if (cbe_cpufreq_has_pmi) { - /* frequency might get limited later, initialize limit with max_freq */ - pmi_frequency_limit = max_freq; - cpufreq_register_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER); - } /* this ensures that policy->cpuinfo_min and policy->cpuinfo_max are set correctly */ return cpufreq_frequency_table_cpuinfo(policy, cbe_freqs); @@ -275,9 +269,6 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy) static int cbe_cpufreq_cpu_exit(struct cpufreq_policy *policy) { - if (cbe_cpufreq_has_pmi) - cpufreq_unregister_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER); - cpufreq_frequency_table_put_attr(policy->cpu); return 0; } @@ -341,6 +332,9 @@ static int __init cbe_cpufreq_init(void) cbe_cpufreq_has_pmi = pmi_register_handler(&cbe_pmi_handler) == 0; + if (cbe_cpufreq_has_pmi) + cpufreq_register_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER); + return cpufreq_register_driver(&cbe_cpufreq_driver); } @@ -348,8 +342,10 @@ static void __exit cbe_cpufreq_exit(void) { cpufreq_unregister_driver(&cbe_cpufreq_driver); - if (cbe_cpufreq_has_pmi) + if (cbe_cpufreq_has_pmi) { + cpufreq_unregister_notifier(&pmi_notifier_block, CPUFREQ_POLICY_NOTIFIER); pmi_unregister_handler(&cbe_pmi_handler); + } } module_init(cbe_cpufreq_init); |