--- kernel/sched/bfs.c | 2 ++ kernel/sched/bfs_sched.h | 13 +++++++++++++ 2 files changed, 15 insertions(+) Index: linux-4.6-ck1/kernel/sched/bfs.c =================================================================== --- linux-4.6-ck1.orig/kernel/sched/bfs.c 2016-06-05 18:46:56.708005910 +1000 +++ linux-4.6-ck1/kernel/sched/bfs.c 2016-06-08 11:31:10.560195448 +1000 @@ -970,6 +970,7 @@ static void activate_task(struct task_st p->on_rq = 1; grq.nr_running++; inc_qnr(); + cpufreq_trigger(grq.niffies); } static inline void clear_sticky(struct task_struct *p); @@ -986,6 +987,7 @@ static inline void deactivate_task(struc p->on_rq = 0; grq.nr_running--; clear_sticky(p); + cpufreq_trigger(grq.niffies); } #ifdef CONFIG_SMP Index: linux-4.6-ck1/kernel/sched/bfs_sched.h =================================================================== --- linux-4.6-ck1.orig/kernel/sched/bfs_sched.h 2016-06-05 18:46:56.709005904 +1000 +++ linux-4.6-ck1/kernel/sched/bfs_sched.h 2016-06-08 11:30:32.767610062 +1000 @@ -191,4 +191,17 @@ static inline struct cpuidle_state *idle return NULL; } #endif + +#ifdef CONFIG_CPU_FREQ +DECLARE_PER_CPU(struct update_util_data *, cpufreq_update_util_data); + +static inline void cpufreq_trigger(u64 time) +{ + struct update_util_data *data; + + data = rcu_dereference_sched(*this_cpu_ptr(&cpufreq_update_util_data)); + if (data) + data->func(data, time, ULONG_MAX, 0); +} +#endif /* CONFIG_CPU_FREQ */ #endif /* BFS_SCHED_H */