summaryrefslogtreecommitdiff
path: root/drivers/cpufreq
diff options
context:
space:
mode:
authorAlex Frid <afrid@nvidia.com>2012-05-14 21:06:11 -0700
committerVarun Wadekar <vwadekar@nvidia.com>2012-05-21 15:10:41 +0530
commite1f2ddbf6666ca1833c35b610056c5ef497c8c22 (patch)
tree3158a2ac4d72f91266537af35f952dd26b279d74 /drivers/cpufreq
parent7e950d743a86e896a92ad966adc8fa634eeea8d9 (diff)
cpufreq: Don't clip PM QoS requests to old policy limits
Clipping PM QoS requests to combined old policy limits that include both PM QoS and user policy requests creates a circular dependency. As a result new PM QoS maximum limit is rejected if it is above previous PM QoS minimum limit even though the new PM QoS minimum limit has been already lowered below new PM QoS maximum limit. Instead clip PM QoS request to the old user policy limits only. Change-Id: Ice0a53a699e0798f07f0e32d6b8a28586fe5db0c Signed-off-by: Alex Frid <afrid@nvidia.com> Reviewed-on: http://git-master/r/102386 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Donghan Ryu <dryu@nvidia.com> Reviewed-by: Antti Miettinen <amiettinen@nvidia.com> Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com> Tested-by: Vikas Ramesh Kedigehalli <vikasr@nvidia.com>
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r--drivers/cpufreq/cpufreq.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 7a306829760d..e1eed49824d6 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1659,9 +1659,9 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data,
unsigned int pmax = policy->max;
qmin = min((unsigned int)pm_qos_request(PM_QOS_CPU_FREQ_MIN),
- data->max);
+ data->user_policy.max);
qmax = max((unsigned int)pm_qos_request(PM_QOS_CPU_FREQ_MAX),
- data->min);
+ data->user_policy.min);
pr_debug("setting new policy for CPU %u: %u - %u (%u - %u) kHz\n",
policy->cpu, pmin, pmax, qmin, qmax);
@@ -1673,7 +1673,8 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data,
memcpy(&policy->cpuinfo, &data->cpuinfo,
sizeof(struct cpufreq_cpuinfo));
- if (policy->min > data->max || policy->max < data->min) {
+ if (policy->min > data->user_policy.max ||
+ policy->max < data->user_policy.min) {
ret = -EINVAL;
goto error_out;
}