From patchwork Tue Dec 12 17:48:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj upadhyay X-Patchwork-Id: 13489743 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LrBqFtUI" Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B47793; Tue, 12 Dec 2023 09:48:46 -0800 (PST) Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-1d0897e99e0so34891605ad.3; Tue, 12 Dec 2023 09:48:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702403325; x=1703008125; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=G3OUBl8PInHDk+EeLZROk+XnMSbBZv0NI2vC5EMY4Yw=; b=LrBqFtUIqrqlAHsZbfsBEkG9PjuhmY5wlIwoex3KxtuVFIKSnBb0bqR68bq9vGZJ3M fZDseTr+tzsi4bHzPte8i9kYIzKUJl5qmTVksXLa0cZ1kN4sfXwU3+FxT0GB/7c1CsMW jWG1HanLRDasQcWf/s/3tVvd6msWwU5OnyMg2EmuAIwvQTv3rUJyyrXbsYlOQPyoY0qP HEQwIIbQA13vqwo8DLKmuOvyFADfogSD85UIhYTN1VmOeOnnEFLevac5hyXh5CzzQesB Ftyi8y50nFLiHy2jGo0TT5HVz0w58IVeBptLZnf4UxLnTZBctYv7D1x382aVQyqHNH00 EPHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702403325; x=1703008125; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=G3OUBl8PInHDk+EeLZROk+XnMSbBZv0NI2vC5EMY4Yw=; b=aNWnmMw465Vry9N5reDSxe+BYl8eNW3odestr5HUqOExWhUHAJOcD1qPn4EUiVDPkz PzUTDZQbHIE5PvFtdUnh/9YL+3mKS85RBuwC+3k5RkdRISJPAED4o9hKkedR5XHlLg0r cfwi7YK1VEe4ODZMQC931m/P1UL0EbopODuHuhWxYrorr2Le37gvom3f8h5Be491SPBN C71Z35d7JHr4jWHfiJICL8aywWf5No6E8sf36w7P3TMu1YqU76YQVsYRii5aHAVCAxiP BqVoeVT+dG5dSTWl2YT6Wm9edhKGN/xfL0LIabBLTDB+ARVwtWGkDWMgtQ13G+OStOe1 CKVg== X-Gm-Message-State: AOJu0Yxp1fwkYwwEZ2GABStX6/Ubo+ezX88YHGrPCTGV+nGZ5FV6lGbi Xi+gkx1JaVkpchuY8Jv9q79QvYfIHWbg+Tuh X-Google-Smtp-Source: AGHT+IGouXu/1nQCE7p7oral2r2qBfOVPWGdexBL6LrAOdHe8ZCg3wK1dbPwvf6lWAJKJQdkaBhQVA== X-Received: by 2002:a17:902:778c:b0:1d0:aeda:9ad5 with SMTP id o12-20020a170902778c00b001d0aeda9ad5mr3032883pll.34.1702403324689; Tue, 12 Dec 2023 09:48:44 -0800 (PST) Received: from localhost.localdomain ([101.0.63.152]) by smtp.gmail.com with ESMTPSA id l17-20020a170902eb1100b001d0b42fa98bsm8880871plb.4.2023.12.12.09.48.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 09:48:44 -0800 (PST) From: "Neeraj Upadhyay (AMD)" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, rostedt@goodmis.org, paulmck@kernel.org, Neeraj.Upadhyay@amd.com, Frederic Weisbecker , Yong He , Joel Fernandes , Neeraj Upadhyay Subject: [PATCH rcu 1/3] srcu: Remove superfluous callbacks advancing from srcu_gp_start() Date: Tue, 12 Dec 2023 23:18:15 +0530 Message-Id: <20231212174817.11919-1-neeraj.iitr10@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231212174750.GA11886@neeraj.linux> References: <20231212174750.GA11886@neeraj.linux> Precedence: bulk X-Mailing-List: rcu@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Frederic Weisbecker Callbacks advancing on SRCU must be performed on two specific places: 1) On enqueue time in order to make room for the acceleration of the new callback. 2) On invocation time in order to move the callbacks ready to invoke. Any other callback advancing callsite is needless. Remove the remaining one in srcu_gp_start(). Co-developed-by: Yong He Signed-off-by: Yong He Co-developed-by: Joel Fernandes Signed-off-by: Joel Fernandes Signed-off-by: Frederic Weisbecker Signed-off-by: Paul E. McKenney Co-developed-by: Neeraj Upadhyay (AMD) Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/srcutree.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 560e99ec5333..e9356a103626 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -772,20 +772,10 @@ EXPORT_SYMBOL_GPL(__srcu_read_unlock_nmisafe); */ static void srcu_gp_start(struct srcu_struct *ssp) { - struct srcu_data *sdp; int state; - if (smp_load_acquire(&ssp->srcu_sup->srcu_size_state) < SRCU_SIZE_WAIT_BARRIER) - sdp = per_cpu_ptr(ssp->sda, get_boot_cpu_id()); - else - sdp = this_cpu_ptr(ssp->sda); lockdep_assert_held(&ACCESS_PRIVATE(ssp->srcu_sup, lock)); WARN_ON_ONCE(ULONG_CMP_GE(ssp->srcu_sup->srcu_gp_seq, ssp->srcu_sup->srcu_gp_seq_needed)); - spin_lock_rcu_node(sdp); /* Interrupts already disabled. */ - rcu_segcblist_advance(&sdp->srcu_cblist, - rcu_seq_current(&ssp->srcu_sup->srcu_gp_seq)); - WARN_ON_ONCE(!rcu_segcblist_segempty(&sdp->srcu_cblist, RCU_NEXT_TAIL)); - spin_unlock_rcu_node(sdp); /* Interrupts remain disabled. */ WRITE_ONCE(ssp->srcu_sup->srcu_gp_start, jiffies); WRITE_ONCE(ssp->srcu_sup->srcu_n_exp_nodelay, 0); smp_mb(); /* Order prior store to ->srcu_gp_seq_needed vs. GP start. */ From patchwork Tue Dec 12 17:48:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj upadhyay X-Patchwork-Id: 13489744 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="R8bc4Bio" Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D641F83; Tue, 12 Dec 2023 09:48:49 -0800 (PST) Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-1d03bcf27e9so36314725ad.0; Tue, 12 Dec 2023 09:48:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702403329; x=1703008129; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nkU8r/Y5CKJ4k3AvWmhHYljnGizcb7g2Kv2I06R4LwY=; b=R8bc4BioBTYCMyz2DdyJKXZxZto0bYhdEGMIVbRg/2WIAWTx70VeICDRfvyC8ZCdrH bo3naoCTbDqHq3yQf7WuqYTQYy/H5GbUcNsx76Dqd2eVjy+630l2bJRx+kDY8L1o++Fg bk6wSFEG5Frv84S6CQwxk70qwElT3Exe7bea8coYkmOxzTRyIYFmIaMwO55NXxscSeCH u8X14cjAMt9PJIHNp6nuL76Z16izXYqXiolnfbhBkZO1e8Ph+RAton2nDd52sOI2GJWj Be3DWOCcL9O9jbfq41LYIlE/kuKhEl4SvYeYgMOr1wU2cTHXRyLxAjxuhcT+MVm8nBjD S/5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702403329; x=1703008129; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nkU8r/Y5CKJ4k3AvWmhHYljnGizcb7g2Kv2I06R4LwY=; b=bOpk5EbtREP1fvFxdmoexCV0JnxB9v1ABtm7q9qiOnnnbWM0eBuPQOOYJyibB+CKo2 x1YHNOvBLCqo/3LbfHClAiFRnuXkTc2xuQ2x5eLFG/feCqxhssX/nlkpot4iq6adqtkM UFhdbxtz93tEWlv2oROkXVo7h/60gPcD/enPIVZ7jMxNpYF3tbZpTZyjcAghat+yvLe4 EQ2lublm3OJhNsKKQ4ozMAZmbPTQ85gs+XrQMx6NbbQ6xCZoLxNqjKsWD8WKr4Na0aKg 0FLsYXUhEzXYRgT3A91ImABqLMFWItnb56Er2lz7GKajXbRFqzQmjVlc3rxxo6+Exs/c pC4g== X-Gm-Message-State: AOJu0Yyu/yCkWAo/RZ+ET70AoN8cgfEKkTk8Z+YCSquHoUcPCiL0b8kP h1Z4WuzW/eHf1BQc0k5juaSoLHRs4MMsIaCd X-Google-Smtp-Source: AGHT+IGdpAkxhoSQdiTeUrIoVI3DwaBHDSrp+D1qX2xg14wlJophzhTnPos4dt5ubuXpd9pc8qA5Hw== X-Received: by 2002:a17:902:e752:b0:1d0:b926:bbcd with SMTP id p18-20020a170902e75200b001d0b926bbcdmr4343131plf.54.1702403328722; Tue, 12 Dec 2023 09:48:48 -0800 (PST) Received: from localhost.localdomain ([101.0.63.152]) by smtp.gmail.com with ESMTPSA id l17-20020a170902eb1100b001d0b42fa98bsm8880871plb.4.2023.12.12.09.48.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 09:48:48 -0800 (PST) From: "Neeraj Upadhyay (AMD)" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, rostedt@goodmis.org, paulmck@kernel.org, Neeraj.Upadhyay@amd.com, Frederic Weisbecker , Joel Fernandes , Neeraj Upadhyay Subject: [PATCH rcu 2/3] srcu: No need to advance/accelerate if no callback enqueued Date: Tue, 12 Dec 2023 23:18:16 +0530 Message-Id: <20231212174817.11919-2-neeraj.iitr10@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231212174750.GA11886@neeraj.linux> References: <20231212174750.GA11886@neeraj.linux> Precedence: bulk X-Mailing-List: rcu@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Frederic Weisbecker While in grace period start, there is nothing to accelerate and therefore no need to advance the callbacks either if no callback is to be enqueued. Spare these needless operations in this case. Signed-off-by: Frederic Weisbecker Reviewed-by: Joel Fernandes (Google) Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/srcutree.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index e9356a103626..2bfc8ed1eed2 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -1261,9 +1261,11 @@ static unsigned long srcu_gp_start_if_needed(struct srcu_struct *ssp, * period (gp_num = X + 8). So acceleration fails. */ s = rcu_seq_snap(&ssp->srcu_sup->srcu_gp_seq); - rcu_segcblist_advance(&sdp->srcu_cblist, - rcu_seq_current(&ssp->srcu_sup->srcu_gp_seq)); - WARN_ON_ONCE(!rcu_segcblist_accelerate(&sdp->srcu_cblist, s) && rhp); + if (rhp) { + rcu_segcblist_advance(&sdp->srcu_cblist, + rcu_seq_current(&ssp->srcu_sup->srcu_gp_seq)); + WARN_ON_ONCE(!rcu_segcblist_accelerate(&sdp->srcu_cblist, s)); + } if (ULONG_CMP_LT(sdp->srcu_gp_seq_needed, s)) { sdp->srcu_gp_seq_needed = s; needgp = true; From patchwork Tue Dec 12 17:48:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj upadhyay X-Patchwork-Id: 13489745 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Hovtu6L6" Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4385EAB; Tue, 12 Dec 2023 09:48:54 -0800 (PST) Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-1d0897e99e0so34892675ad.3; Tue, 12 Dec 2023 09:48:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702403333; x=1703008133; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=btFMgkxywo8icROu0D3fMxutyCln5kSOeODGB3sFA/8=; b=Hovtu6L6rdxL/dcstSbje1s3PDnyAtd5s5WHkRMQXIWgA6OvB9ayCArB+fABzzQakX sxkfYNaEELD8X/rWfRIoTEAvNJx1iL3lq4QqcXSZG8z09TIuB73Uf+KxP4CPto/Vw4EQ 4gEDKWOKwKoDBKuiG+y4+bO3Q56gib+kW7cAwDGAKCsWKNLyrdAccjzVIGfKKJElot31 UxnyEmuLhCiuBlQ/hh81n0c8DMIk6h3wy5ZGQjpuRhv0zmB4KlvwYY0fGCBJNi3iYnQc ve6T7nSZDYVh9nnpQRv/F5J155+6Kcxh31RCJj8ymDnXKDWcUJm2+AhyTXKraHJoDseo MI3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702403333; x=1703008133; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=btFMgkxywo8icROu0D3fMxutyCln5kSOeODGB3sFA/8=; b=c4ytcBcjTSqlOCPrZbWCiqW8wT60XzKY1lMhP9myvFAbpuPhGYZdwtvEbYRuO087vB LxYyMF4o3+pjP9JiB99zBs/XUb/+ArSTEy2N5N/Vxw6XKHEHCJ/2B1XfaksTffddW/xh kSrQivGR5VRQoeDk4fRa50a8cb4tWuYNC9oc7Vgi498aAPfr5YqHFk5RAX7Wlh8l2CuN M4mB3UtHMSAeqAh+jBKjVlwmhZJ0Qfm7OWCL3LfrtLRugpF02RXCu2GB8j5WEmjcYXQ2 Uixey+cSf//LbYWys+lwREBZlQmFcZdcmTseRYrEMUWMSQ3D3JVwEN7UK7hC+Htx8PRq 5IRQ== X-Gm-Message-State: AOJu0Ywv2XfNqAaLVz9yYxvzHYRzxYwrqda1qkzz149xsWtk64CwYfbf kn0xNa+turxcUFr9BPMy1BWjjgHe/A84hXXB X-Google-Smtp-Source: AGHT+IF2FYbKe+vbMhBcMf71PvvDV88AaCRLwzE7NODtKKTCDPRq1ZkcMsRWJcA8R2zUcGXBL5n6zw== X-Received: by 2002:a17:902:efc5:b0:1d0:cc54:85e2 with SMTP id ja5-20020a170902efc500b001d0cc5485e2mr3010887plb.21.1702403333073; Tue, 12 Dec 2023 09:48:53 -0800 (PST) Received: from localhost.localdomain ([101.0.63.152]) by smtp.gmail.com with ESMTPSA id l17-20020a170902eb1100b001d0b42fa98bsm8880871plb.4.2023.12.12.09.48.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 09:48:52 -0800 (PST) From: "Neeraj Upadhyay (AMD)" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, rostedt@goodmis.org, paulmck@kernel.org, Neeraj.Upadhyay@amd.com, Frederic Weisbecker , Joel Fernandes , Neeraj Upadhyay Subject: [PATCH rcu 3/3] srcu: Explain why callbacks invocations can't run concurrently Date: Tue, 12 Dec 2023 23:18:17 +0530 Message-Id: <20231212174817.11919-3-neeraj.iitr10@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231212174750.GA11886@neeraj.linux> References: <20231212174750.GA11886@neeraj.linux> Precedence: bulk X-Mailing-List: rcu@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Frederic Weisbecker If an SRCU barrier is queued while callbacks are running and a new callbacks invocator for the same sdp were to run concurrently, the RCU barrier might execute too early. As this requirement is non-obvious, make sure to keep a record. Signed-off-by: Frederic Weisbecker Reviewed-by: Joel Fernandes (Google) Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/srcutree.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c index 2bfc8ed1eed2..0351a4e83529 100644 --- a/kernel/rcu/srcutree.c +++ b/kernel/rcu/srcutree.c @@ -1715,6 +1715,11 @@ static void srcu_invoke_callbacks(struct work_struct *work) WARN_ON_ONCE(!rcu_segcblist_segempty(&sdp->srcu_cblist, RCU_NEXT_TAIL)); rcu_segcblist_advance(&sdp->srcu_cblist, rcu_seq_current(&ssp->srcu_sup->srcu_gp_seq)); + /* + * Although this function is theoretically re-entrant, concurrent + * callbacks invocation is disallowed to avoid executing an SRCU barrier + * too early. + */ if (sdp->srcu_cblist_invoking || !rcu_segcblist_ready_cbs(&sdp->srcu_cblist)) { spin_unlock_irq_rcu_node(sdp); @@ -1745,6 +1750,7 @@ static void srcu_invoke_callbacks(struct work_struct *work) sdp->srcu_cblist_invoking = false; more = rcu_segcblist_ready_cbs(&sdp->srcu_cblist); spin_unlock_irq_rcu_node(sdp); + /* An SRCU barrier or callbacks from previous nesting work pending */ if (more) srcu_schedule_cbs_sdp(sdp, 0); } From patchwork Wed Dec 13 18:18:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neeraj upadhyay X-Patchwork-Id: 13491759 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bX+E2bqA" Received: from mail-oo1-xc2d.google.com (mail-oo1-xc2d.google.com [IPv6:2607:f8b0:4864:20::c2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C9B9C116; Wed, 13 Dec 2023 10:39:02 -0800 (PST) Received: by mail-oo1-xc2d.google.com with SMTP id 006d021491bc7-58ceab7daddso3134636eaf.3; Wed, 13 Dec 2023 10:39:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702492741; x=1703097541; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jNurO2RUnEzKo4ZS8HOimOcXuDT2A2EtiRl1qsSi+WE=; b=bX+E2bqAO9MGAx+W81g+1R49Ras0p7oBYirKD6USexGbUOIeAKryi1aIGQJLjnmI/E aH1yCm5iOj3ouISJODnOsr7b1dIWr7NCsMY9uv3pojl4oCLxJwV6j4xsXwskIOvp43vD sUGgu56mXUI2pAue4mn3dAzNvmBZNZeb5bsWErmpa64b5mRelhQiKYM96pXxSuT51jRg lUnenxtzelS4xfEt8CGvBrdINi+h+Tbe6r0/cmNm3yZZGP9gEVipjmApqT9Co6H/SlEN 5g1K5CMK76ym+N+Asbyo2WJ54UtA1Wwpq1PIMrkCauEoktTiWeu2AhtjV/ErOoKUg3aG oPrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702492741; x=1703097541; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jNurO2RUnEzKo4ZS8HOimOcXuDT2A2EtiRl1qsSi+WE=; b=QlIuBF8Wmm7cLW363vM4GKPCsQtCh82X89OUvZMZ37vQPxpD68iw4OZAwAiktGQ21E JjGnUUNk77TroOKdYqcd+Q88atjs0AfPq/dB2lR2vS4u3ZxiXI0AXjDGLSbkG3LYZNVr 2uT11UdLwwRChiI1aNtB1x8e2A8OLL5sL6klQuqV9/G4J42xdxtREVD/N1SzvmEjysfd bzQOmnE9vdzoRDX7I2ivp6G75DX6xxTy8PS6mQhOHO0DW7T8dzFewy9xLtdw/uxoOh/q obdTqToVbUouDVqvaeW9/HyKu67o9XrqARWY00A79vV4WXqjByheLW4ziH0HfgvC9qpX pylg== X-Gm-Message-State: AOJu0YxxPvIgIZmbssC1v0Un5pMAlMjDL3glQAK5M3U8ZiDM5U6p7yMt 8W/kIVPQ1rGhiH7kRgCULEtBRg9XRbtYiGfL X-Google-Smtp-Source: AGHT+IGoPgsSzIDZXty3JpWjVN4Zx9Qy5YElEqStEHOl3F+ifcnvX7maL7VZZYoUMZWVeEerEpD2BA== X-Received: by 2002:a05:6358:5e0f:b0:170:4208:ecc with SMTP id q15-20020a0563585e0f00b0017042080eccmr3385080rwn.5.1702492741037; Wed, 13 Dec 2023 10:39:01 -0800 (PST) Received: from localhost.localdomain ([101.0.63.152]) by smtp.gmail.com with ESMTPSA id k189-20020a6324c6000000b005bcea1bf43bsm9981750pgk.12.2023.12.13.10.38.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Dec 2023 10:39:00 -0800 (PST) From: "Neeraj Upadhyay (AMD)" To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, rostedt@goodmis.org, paulmck@kernel.org, Neeraj.Upadhyay@amd.com, Sebastian Andrzej Siewior , Boqun Feng , Neeraj Upadhyay Subject: [PATCH rcu 4/3] srcu: Use try-lock lockdep annotation for NMI-safe access. Date: Wed, 13 Dec 2023 23:48:43 +0530 Message-Id: <20231213181843.12844-1-neeraj.iitr10@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231212174750.GA11886@neeraj.linux> References: <20231212174750.GA11886@neeraj.linux> Precedence: bulk X-Mailing-List: rcu@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Sebastian Andrzej Siewior It is claimed that srcu_read_lock_nmisafe() NMI-safe. However it triggers a lockdep if used from NMI because lockdep expects a deadlock since nothing disables NMIs while the lock is acquired. This is because commit f0f44752f5f61 ("rcu: Annotate SRCU's update-side lockdep dependencies") annotates synchronize_srcu() as a write lock usage. This helps to detect a deadlocks such as srcu_read_lock(); synchronize_srcu(); srcu_read_unlock(); The side effect is that the lock srcu_struct now has a USED usage in normal contexts, so it conflicts with a USED_READ usage in NMI. But this shouldn't cause a real deadlock because the write lock usage from synchronize_srcu() is a fake one and only used for read/write deadlock detection. Use a try-lock annotation for srcu_read_lock_nmisafe() to avoid lockdep complains if used from NMI. Fixes: f0f44752f5f6 ("rcu: Annotate SRCU's update-side lockdep dependencies") Link: https://lore.kernel.org/r/20230927160231.XRCDDSK4@linutronix.de Reviewed-by: Boqun Feng Signed-off-by: Sebastian Andrzej Siewior Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- include/linux/rcupdate.h | 6 ++++++ include/linux/srcu.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index f7206b2623c9..31d523c4e089 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -301,6 +301,11 @@ static inline void rcu_lock_acquire(struct lockdep_map *map) lock_acquire(map, 0, 0, 2, 0, NULL, _THIS_IP_); } +static inline void rcu_try_lock_acquire(struct lockdep_map *map) +{ + lock_acquire(map, 0, 1, 2, 0, NULL, _THIS_IP_); +} + static inline void rcu_lock_release(struct lockdep_map *map) { lock_release(map, _THIS_IP_); @@ -315,6 +320,7 @@ int rcu_read_lock_any_held(void); #else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ # define rcu_lock_acquire(a) do { } while (0) +# define rcu_try_lock_acquire(a) do { } while (0) # define rcu_lock_release(a) do { } while (0) static inline int rcu_read_lock_held(void) diff --git a/include/linux/srcu.h b/include/linux/srcu.h index 127ef3b2e607..236610e4a8fa 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h @@ -229,7 +229,7 @@ static inline int srcu_read_lock_nmisafe(struct srcu_struct *ssp) __acquires(ssp srcu_check_nmi_safety(ssp, true); retval = __srcu_read_lock_nmisafe(ssp); - rcu_lock_acquire(&ssp->dep_map); + rcu_try_lock_acquire(&ssp->dep_map); return retval; }