In system where multiple CPUs shares the same frequency domain a small workload on a CPU can still be subject frequency spikes, generated by the activation of the sugov's kthread.
Since the sugov kthread is a special RT task, which goal is just that to activate a frequency transition, it does not make sense for it to bias the schedutil's frequency selection. This patch exploits the information related to the current task to silently ignore cpufreq_update_this_cpu() calls, coming from the RT scheduler, while the sugov kthread is running. Signed-off-by: Patrick Bellasi <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Rafael J. Wysocki <[email protected]> Cc: Viresh Kumar <[email protected]> Cc: [email protected] Cc: [email protected] --- kernel/sched/cpufreq_schedutil.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 084a98b..a3fe5e4 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -274,6 +274,8 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time, { struct sugov_cpu *sg_cpu = container_of(hook, struct sugov_cpu, update_util); struct sugov_policy *sg_policy = sg_cpu->sg_policy; + unsigned int cpu = smp_processor_id(); + struct task_struct *curr = cpu_curr(cpu); unsigned long util, max; unsigned int next_f; @@ -287,6 +289,10 @@ static void sugov_update_shared(struct update_util_data *hook, u64 time, goto done; } + /* Skip updates generated by sugov kthreads */ + if (curr == sg_policy->thread) + goto done; + sg_cpu->util = util; sg_cpu->max = max; sg_cpu->flags = flags; -- 2.7.4

