Possible fix for yet more problems with wifi code hitting this path in BFS. -ck Index: linux-2.6.36-ck2/kernel/sched_bfs.c =================================================================== --- linux-2.6.36-ck2.orig/kernel/sched_bfs.c 2010-11-17 17:09:06.664416998 +1100 +++ linux-2.6.36-ck2/kernel/sched_bfs.c 2010-11-17 17:11:49.711083665 +1100 @@ -1480,6 +1480,7 @@ struct rq *rq = task_rq(p); bool success = false; + WARN_ON_ONCE(rq != this_rq()); BUG_ON(p == current); lockdep_assert_held(&grq.lock); @@ -2738,6 +2739,7 @@ if (unlikely(signal_pending_state(prev->state, prev))) { prev->state = TASK_RUNNING; } else { + deactivate = 1; /* * If a worker is going to sleep, notify and * ask workqueue whether it wants to wake up a @@ -2748,10 +2750,15 @@ struct task_struct *to_wakeup; to_wakeup = wq_worker_sleeping(prev, cpu); - if (to_wakeup) - try_to_wake_up_local(to_wakeup); + if (to_wakeup) { + /* This shouldn't happen, but does */ + if (unlikely(to_wakeup == prev)) { + WARN_ON_ONCE(1); + deactivate = 0; + } else + try_to_wake_up_local(to_wakeup); + } } - deactivate = 1; } switch_count = &prev->nvcsw; }