Do not call cpufreq trigger on other CPUs. -ck --- kernel/sched/bfs.c | 10 +--------- kernel/sched/bfs_sched.h | 13 ------------- 2 files changed, 1 insertion(+), 22 deletions(-) Index: linux-4.7-ck5/kernel/sched/bfs.c =================================================================== --- linux-4.7-ck5.orig/kernel/sched/bfs.c 2016-09-23 08:33:01.317717573 +1000 +++ linux-4.7-ck5/kernel/sched/bfs.c 2016-09-23 08:33:01.314717591 +1000 @@ -1018,21 +1018,13 @@ void set_task_cpu(struct task_struct *p, */ smp_wmb(); if (p->on_rq) { - struct rq *rq; + struct rq *rq = task_rq(p); - /* - * set_task_cpu can be set on other CPUs so call cpufreq_trigger - * explicitly telling it what CPU is being updated as the value - * of soft_affined has changed. - */ - rq = task_rq(p); rq->soft_affined--; update_load_avg(rq); - other_cpufreq_trigger(tcpu, grq.niffies, rq->load_avg); rq = cpu_rq(cpu); rq->soft_affined++; update_load_avg(rq); - other_cpufreq_trigger(cpu, grq.niffies, rq->load_avg); } task_thread_info(p)->cpu = cpu; } Index: linux-4.7-ck5/kernel/sched/bfs_sched.h =================================================================== --- linux-4.7-ck5.orig/kernel/sched/bfs_sched.h 2016-09-23 08:33:01.317717573 +1000 +++ linux-4.7-ck5/kernel/sched/bfs_sched.h 2016-09-23 08:33:01.315717585 +1000 @@ -207,23 +207,10 @@ static inline void cpufreq_trigger(u64 t if (data) data->func(data, time, util, SCHED_CAPACITY_SCALE); } - -static inline void other_cpufreq_trigger(int cpu, u64 time, unsigned long util) -{ - struct update_util_data *data; - - data = rcu_dereference_sched(*per_cpu_ptr(&cpufreq_update_util_data, cpu)); - if (data) - data->func(data, time, util, SCHED_CAPACITY_SCALE); -} #else static inline void cpufreq_trigger(u64 time, unsigned long util) { } - -static inline void other_cpufreq_trigger(int cpu, u64 time, unsigned long util) -{ -} #endif /* CONFIG_CPU_FREQ */ #ifdef arch_scale_freq_capacity