Messages in this thread Patch in this message | | | From | Pranith Kumar <> | Subject | [PATCH 11/16] rcu: Check for spurious wakeup using return value | Date | Wed, 23 Jul 2014 01:09:48 -0400 |
| |
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 <bobby.prani@gmail.com> --- 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
| |