qcom-cpufreq: Fix frequency table registration
CPUfreq device is the provider of CPU frequency table, and
it should always keep track of freq tables for every CPU itself.
cpufreq_frequency_get_table() is an API for frequency table user.
qcom-cpufreq should not use this API to obtain CPU freq table in
the init function. Otherwise, the following sequence will lead to init
failure.
Assume CPU 0 and 1 are under control of same policy and online. Say
policy->cpu is CPU 0.
1) Hot unplug CPU0
update_policy_cpu() will transfer ownership of policy to CPU1
cpufreq_frequency_table_update_policy_cpu() is called during
the process to set CPU1's freq table to be the same as CPU0's freq
table. CPU0's freq table is now NULL.
2) Hot unplug CPU1
All CPUs in policy are now offline.
3) Hot plug in CPU0
cpufreq_driver->init() is called for initialization. If this init
function calls cpufreq_frequency_get_table() on CPU0, the result
will be NULL.
Current qcom-cpufreq checks return value of cpufreq_frequency_get_table()
and returns an error in init.
Remove the usage of cpufreq_frequency_get_table() and fill in frequency
table for policy->cpu in msm_cpufreq_init().
Change-Id: I2d41af776938c31b4444c9f280a341dd1bed1548
Signed-off-by:
Junjie Wu <junjiew@codeaurora.org>
Loading
Please register or sign in to comment