cpufreq: Reject improper settings for userspace min/max limits
When userspace min/max limits are written to they are compared against the aggregated max/min respectively. This can take system to a bad state as follows: 1) Userspace client writes a max value that is lower than the original value. 2) A kernel client happens to hold a vote for max higher than the userspace max value, so that is what the policy->max is set to as part of cpufreq_set_policy(). But we still set user_policy->max to the value from step 1. 3) Userspace writes a min value that is higher than the max value it wrote before (in step 1). Since cpufreq_set_policy() compares it against policy->max the write is successful and user_policy->min is now higher than user_policy->max. If all the CPUs in a policy go offline with this bad state, trying to bring the first CPU online would fail since cpufreq_online() starts with user_policy->min/max as the original limits. To prevent this scenario, set the limits of the policy passed to cpufreq_set_policy() to the latest userspace values so that any inconsistent settings are rejected. Change-Id: I5ad92ba05162cb5c32c3ba3fdae21d2e505493d3 Signed-off-by:Taniya Das <tdas@codeaurora.org> Signed-off-by:
Rohit Gupta <rohgup@codeaurora.org>
Loading
Please register or sign in to comment