When the gp_kthread wakes up from the wait event, it returns 0 if the wake up is due to the condition having been met. This commit checks this return value for a spurious wake up before calling rcu_gp_init().
Signed-off-by: Pranith Kumar <[email protected]> --- kernel/rcu/tree.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index f8847d9..3b20ad2 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -1790,11 +1790,11 @@ static int __noreturn rcu_gp_kthread(void *arg) ACCESS_ONCE(rsp->gpnum), TPS("reqwait")); rsp->gp_state = RCU_GP_WAIT_GPS; - wait_event_interruptible(rsp->gp_wq, + ret = wait_event_interruptible(rsp->gp_wq, ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_INIT); /* Locking provides needed memory barrier. */ - if (rcu_gp_init(rsp)) + if (!ret && rcu_gp_init(rsp)) break; cond_resched(); flush_signals(current); -- 2.0.0.rc2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

