The sticky task loses its flag by mistake if rescheduled back to back. -ck --- kernel/sched_bfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) Index: linux-2.6.38.2-ck1/kernel/sched_bfs.c =================================================================== --- linux-2.6.38.2-ck1.orig/kernel/sched_bfs.c 2011-04-07 14:51:26.080953467 +1000 +++ linux-2.6.38.2-ck1/kernel/sched_bfs.c 2011-04-07 14:51:56.381953462 +1000 @@ -1052,8 +1052,10 @@ static inline void swap_sticky(struct rq *rq, unsigned long cpu, struct task_struct *p) { if (rq->sticky_task) { - if (rq->sticky_task == p) + if (rq->sticky_task == p) { + p->sticky = 1; return; + } if (rq->sticky_task->sticky) { rq->sticky_task->sticky = 0; resched_closest_idle(rq, cpu, rq->sticky_task);