Make sure to clear the sticky flag when deactivating a task to prevent it generating unnecessary resched_closest_idle calls in swap_sticky. -ck --- kernel/sched_bfs.c | 3 +++ 1 file changed, 3 insertions(+) Index: linux-3.1-ck2/kernel/sched_bfs.c =================================================================== --- linux-3.1-ck2.orig/kernel/sched_bfs.c 2011-11-11 13:28:24.720507442 +1100 +++ linux-3.1-ck2/kernel/sched_bfs.c 2011-11-11 13:28:24.896507430 +1100 @@ -1007,6 +1007,8 @@ static void activate_task(struct task_st inc_qnr(); } +static inline void clear_sticky(struct task_struct *p); + /* * deactivate_task - If it's running, it's not on the grq and we can just * decrement the nr_running. Enter with grq locked. @@ -1016,6 +1018,7 @@ static inline void deactivate_task(struc if (task_contributes_to_load(p)) grq.nr_uninterruptible++; grq.nr_running--; + clear_sticky(p); } #ifdef CONFIG_SMP