diff options
author | Junjie Wu <junjiew@codeaurora.org> | 2015-02-03 14:31:09 -0800 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:02:55 -0700 |
commit | 16d6aa6ee544fcff71abd3c18a935d2d4193d2ed (patch) | |
tree | 2a07c4f2f82c02296553f0a6ccd4b8ce005c0a2e /drivers/cpufreq/qcom-cpufreq.c | |
parent | f1e1ba3b6cfa47f7f2e721dd6487b7891d9f7cae (diff) |
qcom-cpufreq: Remove save/restore of scheduling policy
Different structures might need to be saved and restored based on
different scheduling policies of current thread. Saving and restoring
priority using scheduler APIs is very fragile due to potential changes
in scheduler code. In addition, the priority change doesn't
provide any starvation guarantee because threads can be preempted
before the priority change.
Therefore remove save and restore of priority to avoid potential bugs
when scheduler API changes. Caller will now be responsible for setting
the right priority for their CPU frequency scaling workqueue/thread.
Change-Id: I2a5d8599e75c0c4aa902df3214c17ab2b13dc9a9
Signed-off-by: Junjie Wu <junjiew@codeaurora.org>
Diffstat (limited to 'drivers/cpufreq/qcom-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/qcom-cpufreq.c | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/drivers/cpufreq/qcom-cpufreq.c b/drivers/cpufreq/qcom-cpufreq.c index 25d6a962ca48..6f12bd3e1d2b 100644 --- a/drivers/cpufreq/qcom-cpufreq.c +++ b/drivers/cpufreq/qcom-cpufreq.c @@ -1,9 +1,9 @@ -/* arch/arm/mach-msm/cpufreq.c +/* drivers/cpufreq/qcom-cpufreq.c * * MSM architecture cpufreq driver * * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2007-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2007-2015, The Linux Foundation. All rights reserved. * Author: Mike A. Chan <mikechan@google.com> * * This software is licensed under the terms of the GNU General Public @@ -22,8 +22,6 @@ #include <linux/cpufreq.h> #include <linux/cpu.h> #include <linux/cpumask.h> -#include <linux/sched.h> -#include <linux/sched/rt.h> #include <linux/suspend.h> #include <linux/clk.h> #include <linux/err.h> @@ -49,27 +47,13 @@ static int set_cpu_freq(struct cpufreq_policy *policy, unsigned int new_freq, unsigned int index) { int ret = 0; - int saved_sched_policy = -EINVAL; - int saved_sched_rt_prio = -EINVAL; struct cpufreq_freqs freqs; - struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 }; unsigned long rate; freqs.old = policy->cur; freqs.new = new_freq; freqs.cpu = policy->cpu; - /* - * Put the caller into SCHED_FIFO priority to avoid cpu starvation - * while increasing frequencies - */ - - if (freqs.new > freqs.old && current->policy != SCHED_FIFO) { - saved_sched_policy = current->policy; - saved_sched_rt_prio = current->rt_priority; - sched_setscheduler_nocheck(current, SCHED_FIFO, ¶m); - } - cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); trace_cpu_frequency_switch_start(freqs.old, freqs.new, policy->cpu); @@ -82,11 +66,6 @@ static int set_cpu_freq(struct cpufreq_policy *policy, unsigned int new_freq, trace_cpu_frequency_switch_end(policy->cpu); } - /* Restore priority after clock ramp-up */ - if (freqs.new > freqs.old && saved_sched_policy >= 0) { - param.sched_priority = saved_sched_rt_prio; - sched_setscheduler_nocheck(current, saved_sched_policy, ¶m); - } return ret; } |