From 1c89de06f6ee1103b0b1a50eb4df6ffb6de17967 Mon Sep 17 00:00:00 2001 From: Naveen Ramaraj <nramaraj@codeaurora.org> Date: Fri, 10 Oct 2014 17:45:22 -0700 Subject: [PATCH] cpufreq: Save user policy min/max instead of policy min/max during hotplug When a CPU is hotplugged off, various fields of the policy are saved so that they can be restored when the CPU is hotplugged back in. The existing code saves the policy min/max field during hotplug remove and restores it into user policy min/max during hotplug add. This results in the loss of the user policy min/max values across a hotplug remove/add. Fix it by saving the user policy min/max instead of policy min/max during hotplug remove. During a hotplug add, after user policy min/max is restored, the policy min/max is already recomputed. So, there's no risk of going beyound any limits imposed by the CPUFREQ_ADJUST/INCOMPATIBLE notifiers. Bug: 17889870 Change-Id: Ib8e09fa324c1f80f095c5754b5dcf2685e8e4a66 Signed-off-by: Saravana Kannan <skannan@codeaurora.org> Signed-off-by: Naveen Ramaraj <nramaraj@codeaurora.org> --- drivers/cpufreq/cpufreq.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 32ca70971b4d..46056859155a 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -1114,10 +1114,10 @@ static int __cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif #ifdef CONFIG_HOTPLUG_CPU strncpy(per_cpu(cpufreq_policy_save, cpu).gov, data->governor->name, CPUFREQ_NAME_LEN); - per_cpu(cpufreq_policy_save, cpu).min = data->min; - per_cpu(cpufreq_policy_save, cpu).max = data->max; - pr_debug("Saving CPU%d policy min %d and max %d\n", - cpu, data->min, data->max); + per_cpu(cpufreq_policy_save, cpu).min = data->user_policy.min; + per_cpu(cpufreq_policy_save, cpu).max = data->user_policy.max; + pr_debug("Saving CPU%d user policy min %d and max %d\n", + cpu, data->user_policy.min, data->user_policy.max); #endif /* if we have other CPUs still registered, we need to unlink them, @@ -1143,9 +1143,11 @@ static int __cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif #ifdef CONFIG_HOTPLUG_CPU strncpy(per_cpu(cpufreq_policy_save, j).gov, data->governor->name, CPUFREQ_NAME_LEN); - per_cpu(cpufreq_policy_save, j).min = data->min; - per_cpu(cpufreq_policy_save, j).max = data->max; - pr_debug("Saving CPU%d policy min %d and max %d\n", + per_cpu(cpufreq_policy_save, j).min + = data->user_policy.min; + per_cpu(cpufreq_policy_save, j).max + = data->user_policy.max; + pr_debug("Saving CPU%d user policy min %d and max %d\n", j, data->min, data->max); #endif cpu_dev = get_cpu_device(j); -- GitLab