diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-08-30 14:16:03 +0200 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-08-30 14:16:03 +0200 |
commit | f41b83126cba53849dd2353476a7715613af648f (patch) | |
tree | 582b81ee2f4a8de39db7c58e12dd09a57f62b208 /drivers/cpufreq/cpufreq_governor.c | |
parent | 499aa70a016591e4db5f51745e554aae4471c12a (diff) | |
parent | 6932078376e2c1fd49b6c4aa41cc5e162ee83d8a (diff) |
Merge branch 'pm-cpufreq'
* pm-cpufreq:
cpufreq: Don't use smp_processor_id() in preemptible context
cpufreq: governor: Fix typos in comments
cpufreq: governors: Remove duplicate check of target freq in supported range
cpufreq: Fix timer/workqueue corruption due to double queueing
cpufreq: imx6q: Fix clock enable balance
cpufreq: tegra: fix the wrong clock name
Diffstat (limited to 'drivers/cpufreq/cpufreq_governor.c')
-rw-r--r-- | drivers/cpufreq/cpufreq_governor.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c index 87427360c77f..0806c31e5764 100644 --- a/drivers/cpufreq/cpufreq_governor.c +++ b/drivers/cpufreq/cpufreq_governor.c @@ -119,8 +119,18 @@ void gov_queue_work(struct dbs_data *dbs_data, struct cpufreq_policy *policy, { int i; + if (!policy->governor_enabled) + return; + if (!all_cpus) { - __gov_queue_work(smp_processor_id(), dbs_data, delay); + /* + * Use raw_smp_processor_id() to avoid preemptible warnings. + * We know that this is only called with all_cpus == false from + * works that have been queued with *_work_on() functions and + * those works are canceled during CPU_DOWN_PREPARE so they + * can't possibly run on any other CPU. + */ + __gov_queue_work(raw_smp_processor_id(), dbs_data, delay); } else { for_each_cpu(i, policy->cpus) __gov_queue_work(i, dbs_data, delay); @@ -230,7 +240,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, policy->governor_data = dbs_data; - /* policy latency is in nS. Convert it to uS first */ + /* policy latency is in ns. Convert it to us first */ latency = policy->cpuinfo.transition_latency / 1000; if (latency == 0) latency = 1; |