aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/acpi-cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/acpi-cpufreq.c')
-rw-r--r--drivers/cpufreq/acpi-cpufreq.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
index 18448a7e9f86..b0c18ed8d83f 100644
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
@@ -213,7 +213,7 @@ static unsigned extract_io(u32 value, struct acpi_cpufreq_data *data)
213 213
214static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) 214static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data)
215{ 215{
216 int i; 216 struct cpufreq_frequency_table *pos;
217 struct acpi_processor_performance *perf; 217 struct acpi_processor_performance *perf;
218 218
219 if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) 219 if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
@@ -223,10 +223,9 @@ static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data)
223 223
224 perf = data->acpi_data; 224 perf = data->acpi_data;
225 225
226 for (i = 0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { 226 cpufreq_for_each_entry(pos, data->freq_table)
227 if (msr == perf->states[data->freq_table[i].driver_data].status) 227 if (msr == perf->states[pos->driver_data].status)
228 return data->freq_table[i].frequency; 228 return pos->frequency;
229 }
230 return data->freq_table[0].frequency; 229 return data->freq_table[0].frequency;
231} 230}
232 231
@@ -754,7 +753,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
754 goto err_unreg; 753 goto err_unreg;
755 } 754 }
756 755
757 data->freq_table = kmalloc(sizeof(*data->freq_table) * 756 data->freq_table = kzalloc(sizeof(*data->freq_table) *
758 (perf->state_count+1), GFP_KERNEL); 757 (perf->state_count+1), GFP_KERNEL);
759 if (!data->freq_table) { 758 if (!data->freq_table) {
760 result = -ENOMEM; 759 result = -ENOMEM;
@@ -855,7 +854,6 @@ static int acpi_cpufreq_cpu_exit(struct cpufreq_policy *policy)
855 pr_debug("acpi_cpufreq_cpu_exit\n"); 854 pr_debug("acpi_cpufreq_cpu_exit\n");
856 855
857 if (data) { 856 if (data) {
858 cpufreq_frequency_table_put_attr(policy->cpu);
859 per_cpu(acfreq_data, policy->cpu) = NULL; 857 per_cpu(acfreq_data, policy->cpu) = NULL;
860 acpi_processor_unregister_performance(data->acpi_data, 858 acpi_processor_unregister_performance(data->acpi_data,
861 policy->cpu); 859 policy->cpu);
@@ -907,15 +905,16 @@ static void __init acpi_cpufreq_boost_init(void)
907 905
908 acpi_cpufreq_driver.boost_supported = true; 906 acpi_cpufreq_driver.boost_supported = true;
909 acpi_cpufreq_driver.boost_enabled = boost_state(0); 907 acpi_cpufreq_driver.boost_enabled = boost_state(0);
910 get_online_cpus(); 908
909 cpu_notifier_register_begin();
911 910
912 /* Force all MSRs to the same value */ 911 /* Force all MSRs to the same value */
913 boost_set_msrs(acpi_cpufreq_driver.boost_enabled, 912 boost_set_msrs(acpi_cpufreq_driver.boost_enabled,
914 cpu_online_mask); 913 cpu_online_mask);
915 914
916 register_cpu_notifier(&boost_nb); 915 __register_cpu_notifier(&boost_nb);
917 916
918 put_online_cpus(); 917 cpu_notifier_register_done();
919 } 918 }
920} 919}
921 920