summaryrefslogtreecommitdiffstats
path: root/kernel/sched/cpufreq_schedutil.c
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2017-08-10 09:50:55 +0530
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-08-18 01:35:18 +0200
commite2cabe48c20efb174ce0c01190f8b9c5f3ea1d13 (patch)
tree00782649545658d4f962eb26207ddaa5cd274abe /kernel/sched/cpufreq_schedutil.c
parent209887e6b974c22328487b55d0f390522b014b03 (diff)
downloadtalos-obmc-linux-e2cabe48c20efb174ce0c01190f8b9c5f3ea1d13.tar.gz
talos-obmc-linux-e2cabe48c20efb174ce0c01190f8b9c5f3ea1d13.zip
cpufreq: schedutil: Don't restrict kthread to related_cpus unnecessarily
Utilization update callbacks are now processed remotely, even on the CPUs that don't share cpufreq policy with the target CPU (if dvfs_possible_from_any_cpu flag is set). But in non-fast switch paths, the frequency is changed only from one of policy->related_cpus. This happens because the kthread which does the actual update is bound to a subset of CPUs (i.e. related_cpus). Allow frequency to be remotely updated as well (i.e. call __cpufreq_driver_target()) if dvfs_possible_from_any_cpu flag is set. Reported-by: Pavan Kondeti <pkondeti@codeaurora.org> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'kernel/sched/cpufreq_schedutil.c')
-rw-r--r--kernel/sched/cpufreq_schedutil.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 2ba04bb3182a..69571ee6a175 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -487,7 +487,11 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy)
}
sg_policy->thread = thread;
- kthread_bind_mask(thread, policy->related_cpus);
+
+ /* Kthread is bound to all CPUs by default */
+ if (!policy->dvfs_possible_from_any_cpu)
+ kthread_bind_mask(thread, policy->related_cpus);
+
init_irq_work(&sg_policy->irq_work, sugov_irq_work);
mutex_init(&sg_policy->work_lock);
OpenPOWER on IntegriCloud