aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/cpufreq_governor.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index 0e5929b36276..0806c31e5764 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -123,7 +123,14 @@ void gov_queue_work(struct dbs_data *dbs_data, struct cpufreq_policy *policy,
123 return; 123 return;
124 124
125 if (!all_cpus) { 125 if (!all_cpus) {
126 __gov_queue_work(smp_processor_id(), dbs_data, delay); 126 /*
127 * Use raw_smp_processor_id() to avoid preemptible warnings.
128 * We know that this is only called with all_cpus == false from
129 * works that have been queued with *_work_on() functions and
130 * those works are canceled during CPU_DOWN_PREPARE so they
131 * can't possibly run on any other CPU.
132 */
133 __gov_queue_work(raw_smp_processor_id(), dbs_data, delay);
127 } else { 134 } else {
128 for_each_cpu(i, policy->cpus) 135 for_each_cpu(i, policy->cpus)
129 __gov_queue_work(i, dbs_data, delay); 136 __gov_queue_work(i, dbs_data, delay);