cpufreq: ACPI: Don't validate the frequency table twice
authorViresh Kumar <viresh.kumar@linaro.org>
Mon, 26 Feb 2018 05:08:46 +0000 (10:38 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 20 Mar 2018 11:07:51 +0000 (12:07 +0100)
The cpufreq core is already validating the CPU frequency table after
calling the ->init() callback of the cpufreq drivers and the drivers
don't need to do the same anymore. Though they need to set the
policy->freq_table field directly from the ->init() callback now.

Stop validating the frequency table in the acpi-cpufreq driver.

The driver needs to crosscheck if the max frequency corresponds to the
P-state 0 or not and the same is done from the ->ready() callback now.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/acpi-cpufreq.c

index d0c34df0529c8a8ae425a9a1e845bab0672544ce..9449657d72f0243b78e899efa25f716a12b9a2db 100644 (file)
@@ -794,15 +794,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
                valid_states++;
        }
        freq_table[valid_states].frequency = CPUFREQ_TABLE_END;
+       policy->freq_table = freq_table;
        perf->state = 0;
 
-       result = cpufreq_table_validate_and_show(policy, freq_table);
-       if (result)
-               goto err_freqfree;
-
-       if (perf->states[0].core_frequency * 1000 != policy->cpuinfo.max_freq)
-               pr_warn(FW_WARN "P-state 0 is not max freq\n");
-
        switch (perf->control_register.space_id) {
        case ACPI_ADR_SPACE_SYSTEM_IO:
                /*
@@ -842,8 +836,6 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
 
        return result;
 
-err_freqfree:
-       kfree(freq_table);
 err_unreg:
        acpi_processor_unregister_performance(cpu);
 err_free_mask:
@@ -871,6 +863,15 @@ static int acpi_cpufreq_cpu_exit(struct cpufreq_policy *policy)
        return 0;
 }
 
+static void acpi_cpufreq_cpu_ready(struct cpufreq_policy *policy)
+{
+       struct acpi_processor_performance *perf = per_cpu_ptr(acpi_perf_data,
+                                                             policy->cpu);
+
+       if (perf->states[0].core_frequency * 1000 != policy->cpuinfo.max_freq)
+               pr_warn(FW_WARN "P-state 0 is not max freq\n");
+}
+
 static int acpi_cpufreq_resume(struct cpufreq_policy *policy)
 {
        struct acpi_cpufreq_data *data = policy->driver_data;
@@ -898,6 +899,7 @@ static struct cpufreq_driver acpi_cpufreq_driver = {
        .bios_limit     = acpi_processor_get_bios_limit,
        .init           = acpi_cpufreq_cpu_init,
        .exit           = acpi_cpufreq_cpu_exit,
+       .ready          = acpi_cpufreq_cpu_ready,
        .resume         = acpi_cpufreq_resume,
        .name           = "acpi-cpufreq",
        .attr           = acpi_cpufreq_attr,