In the rare event a task gets its affinity changed off the current CPU, it should only resched another CPU if it is not being deactivated. -ck --- kernel/sched/bfs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) Index: linux-3.7-bfs/kernel/sched/bfs.c =================================================================== --- linux-3.7-bfs.orig/kernel/sched/bfs.c 2013-01-29 01:22:37.207770272 +1100 +++ linux-3.7-bfs/kernel/sched/bfs.c 2013-01-29 01:22:37.621765097 +1100 @@ -3292,9 +3292,10 @@ need_resched: prev->last_ran = rq->clock; /* Task changed affinity off this CPU */ - if (needs_other_cpu(prev, cpu)) - resched_suitable_idle(prev); - else if (!deactivate) { + if (needs_other_cpu(prev, cpu)) { + if (!deactivate) + resched_suitable_idle(prev); + } else if (!deactivate) { if (!queued_notrunning()) { /* * We now know prev is the only thing that is