diff options
Diffstat (limited to 'drivers/cpufreq/acpi-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/acpi-cpufreq.c | 19 |
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 | ||
214 | static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) | 214 | static 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 | ||