Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cpufreq: ACPI: Remove freq_table from acpi_cpufreq_data

The freq-table is stored in struct cpufreq_policy also and there is
absolutely no need of keeping a copy of its reference in struct
acpi_cpufreq_data. Drop it.

Also policy->freq_table can't be NULL in the target() callback, remove
the useless check as well.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
[ rjw: Rebase ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Viresh Kumar and committed by
Rafael J. Wysocki
8cee1eed 9b55f55a

+34 -29
+34 -29
drivers/cpufreq/acpi-cpufreq.c
··· 65 65 #define MSR_K7_HWCR_CPB_DIS (1ULL << 25) 66 66 67 67 struct acpi_cpufreq_data { 68 - struct cpufreq_frequency_table *freq_table; 69 68 unsigned int resume; 70 69 unsigned int cpu_feature; 71 70 unsigned int acpi_perf_cpu; ··· 199 200 return cpu_has(cpu, X86_FEATURE_HW_PSTATE); 200 201 } 201 202 202 - static unsigned extract_io(u32 value, struct acpi_cpufreq_data *data) 203 + static unsigned extract_io(struct cpufreq_policy *policy, u32 value) 203 204 { 205 + struct acpi_cpufreq_data *data = policy->driver_data; 204 206 struct acpi_processor_performance *perf; 205 207 int i; 206 208 ··· 209 209 210 210 for (i = 0; i < perf->state_count; i++) { 211 211 if (value == perf->states[i].status) 212 - return data->freq_table[i].frequency; 212 + return policy->freq_table[i].frequency; 213 213 } 214 214 return 0; 215 215 } 216 216 217 - static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) 217 + static unsigned extract_msr(struct cpufreq_policy *policy, u32 msr) 218 218 { 219 + struct acpi_cpufreq_data *data = policy->driver_data; 219 220 struct cpufreq_frequency_table *pos; 220 221 struct acpi_processor_performance *perf; 221 222 ··· 227 226 228 227 perf = to_perf_data(data); 229 228 230 - cpufreq_for_each_entry(pos, data->freq_table) 229 + cpufreq_for_each_entry(pos, policy->freq_table) 231 230 if (msr == perf->states[pos->driver_data].status) 232 231 return pos->frequency; 233 - return data->freq_table[0].frequency; 232 + return policy->freq_table[0].frequency; 234 233 } 235 234 236 - static unsigned extract_freq(u32 val, struct acpi_cpufreq_data *data) 235 + static unsigned extract_freq(struct cpufreq_policy *policy, u32 val) 237 236 { 237 + struct acpi_cpufreq_data *data = policy->driver_data; 238 + 238 239 switch (data->cpu_feature) { 239 240 case SYSTEM_INTEL_MSR_CAPABLE: 240 241 case SYSTEM_AMD_MSR_CAPABLE: 241 - return extract_msr(val, data); 242 + return extract_msr(policy, val); 242 243 case SYSTEM_IO_CAPABLE: 243 - return extract_io(val, data); 244 + return extract_io(policy, val); 244 245 default: 245 246 return 0; 246 247 } ··· 377 374 return 0; 378 375 379 376 data = policy->driver_data; 380 - if (unlikely(!data || !data->freq_table)) 377 + if (unlikely(!data || !policy->freq_table)) 381 378 return 0; 382 379 383 - cached_freq = data->freq_table[to_perf_data(data)->state].frequency; 384 - freq = extract_freq(get_cur_val(cpumask_of(cpu), data), data); 380 + cached_freq = policy->freq_table[to_perf_data(data)->state].frequency; 381 + freq = extract_freq(policy, get_cur_val(cpumask_of(cpu), data)); 385 382 if (freq != cached_freq) { 386 383 /* 387 384 * The dreaded BIOS frequency change behind our back. ··· 395 392 return freq; 396 393 } 397 394 398 - static unsigned int check_freqs(const struct cpumask *mask, unsigned int freq, 399 - struct acpi_cpufreq_data *data) 395 + static unsigned int check_freqs(struct cpufreq_policy *policy, 396 + const struct cpumask *mask, unsigned int freq) 400 397 { 398 + struct acpi_cpufreq_data *data = policy->driver_data; 401 399 unsigned int cur_freq; 402 400 unsigned int i; 403 401 404 402 for (i = 0; i < 100; i++) { 405 - cur_freq = extract_freq(get_cur_val(mask, data), data); 403 + cur_freq = extract_freq(policy, get_cur_val(mask, data)); 406 404 if (cur_freq == freq) 407 405 return 1; 408 406 udelay(10); ··· 420 416 unsigned int next_perf_state = 0; /* Index into perf table */ 421 417 int result = 0; 422 418 423 - if (unlikely(data == NULL || data->freq_table == NULL)) { 419 + if (unlikely(!data)) { 424 420 return -ENODEV; 425 421 } 426 422 427 423 perf = to_perf_data(data); 428 - next_perf_state = data->freq_table[index].driver_data; 424 + next_perf_state = policy->freq_table[index].driver_data; 429 425 if (perf->state == next_perf_state) { 430 426 if (unlikely(data->resume)) { 431 427 pr_debug("Called after resume, resetting to P%d\n", ··· 448 444 drv_write(data, mask, perf->states[next_perf_state].control); 449 445 450 446 if (acpi_pstate_strict) { 451 - if (!check_freqs(mask, data->freq_table[index].frequency, 452 - data)) { 447 + if (!check_freqs(policy, mask, 448 + policy->freq_table[index].frequency)) { 453 449 pr_debug("acpi_cpufreq_target failed (%d)\n", 454 450 policy->cpu); 455 451 result = -EAGAIN; ··· 476 472 * The table is sorted in the reverse order with respect to the 477 473 * frequency and all of the entries are valid (see the initialization). 478 474 */ 479 - entry = data->freq_table; 475 + entry = policy->freq_table; 480 476 do { 481 477 entry++; 482 478 freq = entry->frequency; ··· 669 665 unsigned int result = 0; 670 666 struct cpuinfo_x86 *c = &cpu_data(policy->cpu); 671 667 struct acpi_processor_performance *perf; 668 + struct cpufreq_frequency_table *freq_table; 672 669 #ifdef CONFIG_SMP 673 670 static int blacklisted; 674 671 #endif ··· 781 776 goto err_unreg; 782 777 } 783 778 784 - data->freq_table = kzalloc(sizeof(*data->freq_table) * 779 + freq_table = kzalloc(sizeof(*freq_table) * 785 780 (perf->state_count+1), GFP_KERNEL); 786 - if (!data->freq_table) { 781 + if (!freq_table) { 787 782 result = -ENOMEM; 788 783 goto err_unreg; 789 784 } ··· 807 802 /* table init */ 808 803 for (i = 0; i < perf->state_count; i++) { 809 804 if (i > 0 && perf->states[i].core_frequency >= 810 - data->freq_table[valid_states-1].frequency / 1000) 805 + freq_table[valid_states-1].frequency / 1000) 811 806 continue; 812 807 813 - data->freq_table[valid_states].driver_data = i; 814 - data->freq_table[valid_states].frequency = 808 + freq_table[valid_states].driver_data = i; 809 + freq_table[valid_states].frequency = 815 810 perf->states[i].core_frequency * 1000; 816 811 valid_states++; 817 812 } 818 - data->freq_table[valid_states].frequency = CPUFREQ_TABLE_END; 813 + freq_table[valid_states].frequency = CPUFREQ_TABLE_END; 819 814 perf->state = 0; 820 815 821 - result = cpufreq_table_validate_and_show(policy, data->freq_table); 816 + result = cpufreq_table_validate_and_show(policy, freq_table); 822 817 if (result) 823 818 goto err_freqfree; 824 819 ··· 865 860 return result; 866 861 867 862 err_freqfree: 868 - kfree(data->freq_table); 863 + kfree(freq_table); 869 864 err_unreg: 870 865 acpi_processor_unregister_performance(cpu); 871 866 err_free_mask: ··· 887 882 policy->driver_data = NULL; 888 883 acpi_processor_unregister_performance(data->acpi_perf_cpu); 889 884 free_cpumask_var(data->freqdomain_cpus); 890 - kfree(data->freq_table); 885 + kfree(policy->freq_table); 891 886 kfree(data); 892 887 893 888 return 0;