From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932457AbaGWFMi (ORCPT ); Wed, 23 Jul 2014 01:12:38 -0400 Received: from mail-yk0-f180.google.com ([209.85.160.180]:51180 "EHLO mail-yk0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757413AbaGWFLC (ORCPT ); Wed, 23 Jul 2014 01:11:02 -0400 From: Pranith Kumar To: "Paul E. McKenney" , Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , linux-kernel@vger.kernel.org (open list:READ-COPY UPDATE...) Subject: [PATCH 11/16] rcu: Check for spurious wakeup using return value Date: Wed, 23 Jul 2014 01:09:48 -0400 Message-Id: <1406092194-13004-12-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 2.0.0.rc2 In-Reply-To: <1406092194-13004-1-git-send-email-bobby.prani@gmail.com> References: <1406092194-13004-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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