sched: Fix ttwu() for __ARCH_WANT_INTERRUPTS_ON_CTXSW
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Thu, 26 May 2011 12:21:33 +0000 (14:21 +0200)
committerIngo Molnar <mingo@elte.hu>
Sat, 28 May 2011 15:02:55 +0000 (17:02 +0200)
commitd6aa8f85f16379d42c147b22b59e33b67f9ff466
tree7e28fec1b4d23f5a60fb3370dd446b36aff66379
parentcd4ae6adf8b1c21d88e83ed56afeeef97b28f356
sched: Fix ttwu() for __ARCH_WANT_INTERRUPTS_ON_CTXSW

Marc reported that e4a52bcb9 (sched: Remove rq->lock from the first
half of ttwu()) broke his ARM-SMP machine. Now ARM is one of the few
__ARCH_WANT_INTERRUPTS_ON_CTXSW users, so that exception in the ttwu()
code was suspect.

Yong found that the interrupt could hit after context_switch() changes
current but before it clears p->on_cpu, if that interrupt were to
attempt a wake-up of p we would indeed find ourselves spinning in IRQ
context.

Fix this by reverting to the old behaviour for this situation and
perform a full remote wake-up.

Cc: Frank Rowand <frank.rowand@am.sony.com>
Cc: Yong Zhang <yong.zhang0@gmail.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Reported-by: Marc Zyngier <Marc.Zyngier@arm.com>
Tested-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched.c