cpufreq: Allow freq_table to be obtained for offline CPUs
authorViresh Kumar <viresh.kumar@linaro.org>
Thu, 9 Jul 2015 23:43:27 +0000 (01:43 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 9 Jul 2015 23:43:27 +0000 (01:43 +0200)
commit5a31d594a9732a2fa2eb83b0c4dcba75da2dff5d
treea1bfb8dae1e550b837c5640a97be1b75bea0659f
parent35afd02e30d6368073df604920c4ea7cddadf5d0
cpufreq: Allow freq_table to be obtained for offline CPUs

Users of freq table may want to access it for any CPU from
policy->related_cpus mask. One such user is cpu-cooling layer. It gets a
list of 'clip_cpus' (equivalent to policy->related_cpus) during
registration and tries to get freq_table for the first CPU of this mask.

If the CPU, for which it tries to fetch freq_table, is offline,
cpufreq_frequency_get_table() fails. This happens because it relies on
cpufreq_cpu_get_raw() for its functioning which returns policy only for
online CPUs.

The fix is to access the policy data structure for the given CPU
directly (which also returns a valid policy for offline CPUs), but the
policy itself has to be active (meaning that at least one CPU using it
is online) for the frequency table to be returned.

Because we will be using 'cpufreq_cpu_data' now, which is internal to
the cpufreq core, move cpufreq_frequency_get_table() to cpufreq.c.

Reported-and-tested-by: Pi-Cheng Chen <pi-cheng.chen@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cpufreq.c
drivers/cpufreq/freq_table.c