From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB5C428ECE3; Wed, 9 Jul 2025 10:42:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057756; cv=none; b=WpxW8lQA6Xh5uktEpIU1PkF/Um+UcrDa4dLyn8y6VgVu5DMDUhfpWBB2118nVlziaJ04vMVgTvqfMkN6g1AY5xaNuJ2vjrM+FO1pLnQT3iMVYVJWmram3ta2fkaB5r0CW15zTJfsxFIsOn9cj3sIfx3rSMSWZ0t6jNs75hjrCkE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057756; c=relaxed/simple; bh=SzxkaOuv/N7hhZVa2OKTcKqSRoz3CcE3SpKXXMgs8B8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gQMb2GMjNgqGwiwn0IIcx7gQpngK323vcC89HYD/WSwJyEAA04fGb4nZkY9fOkWXAsneBco5vQqt9imG6Pn39YYXLK2NnXVlGnCUwPcw2nKgBOQdXw8MnfF2mPu0nQUsKO8KvpA+AtM3gd2zgsK3WDdqWFb5a38qAAXXXAwAJz8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J7bB13un; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="J7bB13un" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 364F3C4CEEF; Wed, 9 Jul 2025 10:42:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057756; bh=SzxkaOuv/N7hhZVa2OKTcKqSRoz3CcE3SpKXXMgs8B8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J7bB13un4EGNFbQVIFVG/6nsvt+/wJIr8X1lzAYUj3tGRtsKs1yK/F/3lQ+iwnld1 Bmyid1kocUZlr0u5gTD3UIneHciGBkcI5ZDjXVCj8bztZ5xpKKFl9ZPLILqWiO7eNT 7f/LH6IRcybJpq8EXOybPXASG9sflM0W3QqFgI6XhaT9hbSV9PPJe2UXKmmjEdxbx0 LPcDF/Fns4oYGFw1ZIWuuZ9QnROHhp0wWcKtA4RIft+fsqMXlc8QiNACwphGT+NISG kGWO/375UjyX0gUGbCMEsrQsxnqBRdaK7XmYTCFygYbnu8hPEsv8JeyGZZcdjL2G/v 7GKYs2u/mc1mg== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 01/15] rcutorture: Print only one rtort_pipe_count splat Date: Wed, 9 Jul 2025 16:12:01 +0530 Message-Id: <20250709104215.15562-2-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" The rcu_torture_writer() function scans the memory blocks after a stutter (or forced idle) interval, complaining about any that have not passed through ten grace periods since the start of the stutter interval. But one splat suffices, so this commit therefore stops at the first splat. Signed-off-by: Paul E. McKenney Signed-off-by: Joel Fernandes Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 70ec0f21abc3..d1e0d61d8815 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1722,6 +1722,7 @@ rcu_torture_writer(void *arg) cur_ops->gp_kthread_dbg(); WARN(1, "%s: rtort_pipe_count: %d\n", __func__, rcu_tortures[i].rtort= _pipe_count); rcu_ftrace_dump(DUMP_ALL); + break; } if (stutter_waited) sched_set_normal(current, oldnice); --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D2FE28D82F; Wed, 9 Jul 2025 10:42:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057762; cv=none; b=n1i1naKqcNPsPrgF4VU2H5B+5S8LdgQQG8gu3JONxQiigctVDx+GlKi/4kIgYZ/fXoM0qxM19ygOwKNaemjWyE9FrGX+CZPw9jCyx1Idq91T1PQtIhEWeiErAERnbVizqlaFPc1KV2yF3h4P6/dkIfuWIFwHPEsDLX2kaanr1eQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057762; c=relaxed/simple; bh=wUBGKF3tuqboI0ct3NbCXZ834tVW8bDTlFnBSWO6xWw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=J8oOhoQVqorXNzxCFW0gn9kEwUjV0qpvXmzH9JpaQ2nugnOEqPTMZG11zibS4DK5jUbeaaOdVuhrZRCFGTx1xoLp+E62Y6/qDr8343s1Oh00DztLlWAPA59yl2RGO2EZgsiGjLeslzxn1pn/6s6v2zXqmTxyInzq1T1G0faTQzQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lIDmdrhw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lIDmdrhw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BEC2C4CEF7; Wed, 9 Jul 2025 10:42:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057762; bh=wUBGKF3tuqboI0ct3NbCXZ834tVW8bDTlFnBSWO6xWw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lIDmdrhwriVle5grseJFdkOFmvNAShnFC0R40m7g0yJigz8XHp6aYNunVlwIrBofD 5dLTg3ZmiT6A6B7nzgSik826UrJzf1Muf1l19i32tfdl8avNVT62CZrUogDKoic+Ii 5q7nw5nLvD6Zw0G9Kqw2vZkDR3EQ3vWvfN+22DjE4ZSpYI8v16TTLmWHk9Zh6Qi+c1 zibgOHVXDPGabNfwtPrLXuWO/uk4rLYj1bZsPw8vBbxc4uh6MpuRfxUXcRmmE/58CK 3o2Ei/eGQ/jB0Ievfsun8sRTcl91JHFPIzPEGychnXO+ZcaUf3rGJXqxJe1IhPk0hK FZGXSPDFBiHlA== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 02/15] rcutorture: Start rcu_torture_writer() after rcu_torture_reader() Date: Wed, 9 Jul 2025 16:12:02 +0530 Message-Id: <20250709104215.15562-3-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" Testing of rcutorture's SRCU-P scenario on a large arm64 system resulted in rcu_torture_writer() forward-progress failures, but these same tests passed on x86. After some off-list discussion of possible memory-ordering causes for these failures, Boqun showed that these were in fact due to reordering, but by the scheduler, not by the memory system. On x86, rcu_torture_writer() would have run quickly enough that by the time the rcu_torture_updown() kthread started, the rcu_torture_current variable would already be initialized, thus avoiding a bug in which a NULL value would cause rcu_torture_updown() to do an extra call to srcu_up_read_fast(). This commit therefore moves creation of the rcu_torture_writer() kthread after that of the rcu_torture_reader() kthreads. This results in deterministic failures on x86. What about the double-srcu_up_read_fast() bug? Boqun has the fix. But let's also fix the test while we are at it! Reported-by: Joel Fernandes Reported-by: Boqun Feng Signed-off-by: Paul E. McKenney Signed-off-by: Joel Fernandes Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index d1e0d61d8815..a209d2419cfd 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -4246,11 +4246,6 @@ rcu_torture_init(void) /* Start up the kthreads. */ =20 rcu_torture_write_types(); - firsterr =3D torture_create_kthread(rcu_torture_writer, NULL, - writer_task); - if (torture_init_error(firsterr)) - goto unwind; - if (nrealfakewriters > 0) { fakewriter_tasks =3D kcalloc(nrealfakewriters, sizeof(fakewriter_tasks[0]), @@ -4283,6 +4278,12 @@ rcu_torture_init(void) if (torture_init_error(firsterr)) goto unwind; } + + firsterr =3D torture_create_kthread(rcu_torture_writer, NULL, + writer_task); + if (torture_init_error(firsterr)) + goto unwind; + nrealnocbers =3D nocbs_nthreads; if (WARN_ON(nrealnocbers < 0)) nrealnocbers =3D 1; --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1448328FFFB; Wed, 9 Jul 2025 10:42:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057768; cv=none; b=fVF8UZC7hK9tn9sDflKR8pNPZ2O/8ndxyHg+541fEBohqWgiO0fcV9g3k9lvctKMQZ7dka1y3SBS+BdWKFN+NuCvgqa4fGmd015mDib306l4QTkkzjcRs8Y6CajhRW/6j7hiMSHcCLFm+bbeAuqlZQcFmmx9sL0ueAl5Kp9PnDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057768; c=relaxed/simple; bh=wKdPJPJ/I6sElxr2X9zIgE1Q3fP7t2VCbZRiKZAMmwU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=pIeOAEO/wudYVfBW5AekgKLjxfCGaCbhOWzE/ghPNAM47uVSoa7p98VnFMB14SJ/x05h6fH9xbGgItrBtsz+c6SWe7JVBQhuZUR0WtTFud1OnNpxwrJ1mjNIGMJThMtY3SKb8Do0+O3SS998jZMtiW80/zBuL3lA5VyPfUXzJnY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dT8Uvg88; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dT8Uvg88" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D6CB2C4CEEF; Wed, 9 Jul 2025 10:42:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057767; bh=wKdPJPJ/I6sElxr2X9zIgE1Q3fP7t2VCbZRiKZAMmwU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dT8Uvg88EFyM/JUm8nXkWLtPg7Egt7t/Zg1orojILyEBvhWWMw4dq4DcHglwxugzb OSzUFh9PIz7U8OetbxhDfRmTjn4GuM5cVpfcACBbUD/P72e5fbDhOOjdwQKYqJjBDU epB5uS4lj0B/xfTfdpktxQ+ToR00FjWzLCkX2vNtiBzcXrKA20WicR+nshuHET5Czt +3/YiLcSsOwM2cv2JrTO8oP0+2GgtA+7kh7887Np93jQVQO+p7yg4tFsw3pbmB2Lwn hEW+39X8447PDk6RGgbPYbKWdxKHU45oFbhv5rauqmv3jPz82eeFDD1svZbJ4rOgHt mCATuBXYvC86w== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" , kernel test robot Subject: [PATCH rcu 03/15] rcutorture: Make rcutorture_one_extend_check() account for hard IRQs Date: Wed, 9 Jul 2025 16:12:03 +0530 Message-Id: <20250709104215.15562-4-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" This commit retrospectively prepares for testing of RCU readers invoked from hardware interrupt handlers (for example, HRTIMER_MODE_HARD hrtimer handlers) in kernels built with CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE=3Dy, which is rarely used but sometimes extremely useful. This preparation involves taking early exits if in_hardirq(), and, while we are in the area, a very early exit if in_nmi(). This means that a number of insoftirq parameters are no longer needed, but that is the subject of a later commit. Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-lkp/202505140917.8ee62cc6-lkp@intel.com Signed-off-by: Paul E. McKenney Tested-by: kernel test robot Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index a209d2419cfd..7944cc69321d 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1920,10 +1920,10 @@ static void rcutorture_one_extend_check(char *s, in= t curstate, int new, int old, { int mask; =20 - if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE)) + if (!IS_ENABLED(CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE) || in_nmi()) return; =20 - WARN_ONCE(!(curstate & RCUTORTURE_RDR_IRQ) && irqs_disabled(), ROEC_ARGS); + WARN_ONCE(!(curstate & RCUTORTURE_RDR_IRQ) && irqs_disabled() && !in_hard= irq(), ROEC_ARGS); WARN_ONCE((curstate & RCUTORTURE_RDR_IRQ) && !irqs_disabled(), ROEC_ARGS); =20 // If CONFIG_PREEMPT_COUNT=3Dn, further checks are unreliable. @@ -1938,9 +1938,9 @@ static void rcutorture_one_extend_check(char *s, int = curstate, int new, int old, (curstate & (RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2)) && cur_ops->readlock_nesting() =3D=3D 0, ROEC_ARGS); =20 - // Timer handlers have all sorts of stuff disabled, so ignore + // Interrupt handlers have all sorts of stuff disabled, so ignore // unintended disabling. - if (insoftirq) + if (in_serving_softirq() || in_hardirq()) return; =20 WARN_ONCE(cur_ops->extendables && --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB4B628FFF3; Wed, 9 Jul 2025 10:42:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057774; cv=none; b=kz2mF3uKHix2Nv/Tnc2Idc38HB706mlVbeoT3P2MeYF9VnPrqNTcPjP14WRDKKy253NFwBOG9mQiuSua7OpZ0MzuRM5LuRJJeyWs7b7jh4xKinScF4is6DpsjbY42kHAhe2qYuaSK2Hhz8jMFnGiBtGGEERIe7r1+V9z7UB8vzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057774; c=relaxed/simple; bh=W754T72QzhrMs7jagPuYeJx2dNlz3h4n/qGsOD1cmH8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sUfHZlIUa1QZ9+YDAuE3PxALJee9SIYsGgT68FiV8IU3nkrgKSz8Kr2vXuVyWEQCwrEINpegzKm3AelOnyReKcnl1t0JF3vpOrj3C5ytNbki2KMTirnK2wX3ml2lBVc156umd2SAHZuRrUt6tvl8zEbYzEijgIr115NOofTnAdw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X4+azsNS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X4+azsNS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9A84DC4CEF5; Wed, 9 Jul 2025 10:42:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057774; bh=W754T72QzhrMs7jagPuYeJx2dNlz3h4n/qGsOD1cmH8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X4+azsNSdulXhYcPJIW5q982aU8uQyuUctuPP4aBF1NPsUds6wmeZfm6CLlu5nH9o mATDsOPAaMPqlX6M+iDg8AwBK/nc86UpRvicbG2+D16u0ove8m4PutmIaqLlPXJCu4 XR7IgQesehS8pRlA3NXT5Y7yY5b2xCScvgAvmFFJXboGxSaiPoxPcweapPOcnLkLkn NOkM52HWN43fZ2xmtw8AUNbmP46pk+qUQVCIlCGQR61oj8tyUFxepdPfHdglIKjM7M qCFzT9tT3tB60BZO/a4GCYePOUZImVaxS1HcyW0x3BHhmra6hWDMMusWLzMArxaSZn ISBbu3crprZ3g== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" , kernel test robot Subject: [PATCH rcu 04/15] rcutorture: Add tests for SRCU up/down reader primitives Date: Wed, 9 Jul 2025 16:12:04 +0530 Message-Id: <20250709104215.15562-5-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" This commit adds a new rcutorture.n_up_down kernel boot parameter that specifies the number of outstanding SRCU up/down readers, which begin in kthread context and end in an hrtimer handler. There is a new kthread ("rcu_torture_updown") that scans an per-reader array looking for elements whose readers have ended. This kthread sleeps between one and two milliseconds between consecutive scans. [ paulmck: Apply kernel test robot feedback. ] [ paulmck: Apply Z qiang feedback. ] [ joel: Fix build error: hrtimer_init is replaced by hrtimer_setup. ] [ joel: Apply Boqun bug fix to drop extra up_read() call in rcu_torture_updown()]. Signed-off-by: Paul E. McKenney Signed-off-by: Joel Fernandes Tested-by: kernel test robot Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 225 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 206 insertions(+), 19 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 7944cc69321d..bf87c0c4e77e 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -55,22 +55,24 @@ MODULE_DESCRIPTION("Read-Copy Update module-based tortu= re test facility"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Paul E. McKenney and Josh Triplett = "); =20 -/* Bits for ->extendables field, extendables param, and related definition= s. */ -#define RCUTORTURE_RDR_SHIFT_1 8 /* Put SRCU index in upper bits. */ -#define RCUTORTURE_RDR_MASK_1 (0xff << RCUTORTURE_RDR_SHIFT_1) -#define RCUTORTURE_RDR_SHIFT_2 16 /* Put SRCU index in upper bits. */ -#define RCUTORTURE_RDR_MASK_2 (0xff << RCUTORTURE_RDR_SHIFT_2) -#define RCUTORTURE_RDR_BH 0x01 /* Extend readers by disabling bh. */ -#define RCUTORTURE_RDR_IRQ 0x02 /* ... disabling interrupts. */ -#define RCUTORTURE_RDR_PREEMPT 0x04 /* ... disabling preemption. */ -#define RCUTORTURE_RDR_RBH 0x08 /* ... rcu_read_lock_bh(). */ -#define RCUTORTURE_RDR_SCHED 0x10 /* ... rcu_read_lock_sched(). */ -#define RCUTORTURE_RDR_RCU_1 0x20 /* ... entering another RCU reader. */ -#define RCUTORTURE_RDR_RCU_2 0x40 /* ... entering another RCU reader. */ -#define RCUTORTURE_RDR_NBITS 7 /* Number of bits defined above. */ -#define RCUTORTURE_MAX_EXTEND \ +// Bits for ->extendables field, extendables param, and related definition= s. +#define RCUTORTURE_RDR_SHIFT_1 8 // Put SRCU index in upper bits. +#define RCUTORTURE_RDR_MASK_1 (0xff << RCUTORTURE_RDR_SHIFT_1) +#define RCUTORTURE_RDR_SHIFT_2 16 // Put SRCU index in upper bits. +#define RCUTORTURE_RDR_MASK_2 (0xff << RCUTORTURE_RDR_SHIFT_2) +#define RCUTORTURE_RDR_BH 0x01 // Extend readers by disabling bh. +#define RCUTORTURE_RDR_IRQ 0x02 // ... disabling interrupts. +#define RCUTORTURE_RDR_PREEMPT 0x04 // ... disabling preemption. +#define RCUTORTURE_RDR_RBH 0x08 // ... rcu_read_lock_bh(). +#define RCUTORTURE_RDR_SCHED 0x10 // ... rcu_read_lock_sched(). +#define RCUTORTURE_RDR_RCU_1 0x20 // ... entering another RCU reader. +#define RCUTORTURE_RDR_RCU_2 0x40 // ... entering another RCU reader. +#define RCUTORTURE_RDR_UPDOWN 0x80 // ... up-read from task, down-read fr= om timer. + // Note: Manual start, automatic end. +#define RCUTORTURE_RDR_NBITS 8 // Number of bits defined above. +#define RCUTORTURE_MAX_EXTEND \ (RCUTORTURE_RDR_BH | RCUTORTURE_RDR_IRQ | RCUTORTURE_RDR_PREEMPT | \ - RCUTORTURE_RDR_RBH | RCUTORTURE_RDR_SCHED) + RCUTORTURE_RDR_RBH | RCUTORTURE_RDR_SCHED) // Intentionally omit RCUTOR= TURE_RDR_UPDOWN. #define RCUTORTURE_RDR_ALLBITS \ (RCUTORTURE_MAX_EXTEND | RCUTORTURE_RDR_RCU_1 | RCUTORTURE_RDR_RCU_2 | \ RCUTORTURE_RDR_MASK_1 | RCUTORTURE_RDR_MASK_2) @@ -110,6 +112,7 @@ torture_param(bool, gp_sync, false, "Use synchronous GP= wait primitives"); torture_param(int, irqreader, 1, "Allow RCU readers from irq handlers"); torture_param(int, leakpointer, 0, "Leak pointer dereferences from readers= "); torture_param(int, n_barrier_cbs, 0, "# of callbacks/kthreads for barrier = testing"); +torture_param(int, n_up_down, 32, "# of concurrent up/down hrtimer-based R= CU readers"); torture_param(int, nfakewriters, 4, "Number of RCU fake writer threads"); torture_param(int, nreaders, -1, "Number of RCU reader threads"); torture_param(int, object_debug, 0, "Enable debug-object double call_rcu()= testing"); @@ -156,6 +159,7 @@ static int nrealfakewriters; static struct task_struct *writer_task; static struct task_struct **fakewriter_tasks; static struct task_struct **reader_tasks; +static struct task_struct *updown_task; static struct task_struct **nocb_tasks; static struct task_struct *stats_task; static struct task_struct *fqs_task; @@ -378,6 +382,8 @@ struct rcu_torture_ops { void (*readunlock)(int idx); int (*readlock_held)(void); // lockdep. int (*readlock_nesting)(void); // actual nesting, if available, -1 if not. + int (*down_read)(void); + void (*up_read)(int idx); unsigned long (*get_gp_seq)(void); unsigned long (*gp_diff)(unsigned long new, unsigned long old); void (*deferred_free)(struct rcu_torture *p); @@ -427,6 +433,7 @@ struct rcu_torture_ops { int no_pi_lock; int debug_objects; int start_poll_irqsoff; + int have_up_down; const char *name; }; =20 @@ -762,6 +769,50 @@ static int torture_srcu_read_lock_held(void) return srcu_read_lock_held(srcu_ctlp); } =20 +static bool srcu_torture_have_up_down(void) +{ + int rf =3D reader_flavor; + + if (!rf) + rf =3D SRCU_READ_FLAVOR_NORMAL; + return !!(cur_ops->have_up_down & rf); +} + +static int srcu_torture_down_read(void) +{ + int idx; + struct srcu_ctr __percpu *scp; + + WARN_ON_ONCE(reader_flavor & ~SRCU_READ_FLAVOR_ALL); + WARN_ON_ONCE(reader_flavor & (reader_flavor - 1)); + + if ((reader_flavor & SRCU_READ_FLAVOR_NORMAL) || !(reader_flavor & SRCU_R= EAD_FLAVOR_ALL)) { + idx =3D srcu_down_read(srcu_ctlp); + WARN_ON_ONCE(idx & ~0x1); + return idx; + } + if (reader_flavor & SRCU_READ_FLAVOR_FAST) { + scp =3D srcu_down_read_fast(srcu_ctlp); + idx =3D __srcu_ptr_to_ctr(srcu_ctlp, scp); + WARN_ON_ONCE(idx & ~0x1); + return idx << 3; + } + WARN_ON_ONCE(1); + return 0; +} + +static void srcu_torture_up_read(int idx) +{ + WARN_ON_ONCE((reader_flavor && (idx & ~reader_flavor)) || (!reader_flavor= && (idx & ~0x1))); + if (reader_flavor & SRCU_READ_FLAVOR_FAST) + srcu_up_read_fast(srcu_ctlp, __srcu_ctr_to_ptr(srcu_ctlp, (idx & 0x8) >>= 3)); + else if ((reader_flavor & SRCU_READ_FLAVOR_NORMAL) || + !(reader_flavor & SRCU_READ_FLAVOR_ALL)) + srcu_up_read(srcu_ctlp, idx & 0x1); + else + WARN_ON_ONCE(1); +} + static unsigned long srcu_torture_completed(void) { return srcu_batches_completed(srcu_ctlp); @@ -819,6 +870,8 @@ static struct rcu_torture_ops srcu_ops =3D { .readlock =3D srcu_torture_read_lock, .read_delay =3D srcu_read_delay, .readunlock =3D srcu_torture_read_unlock, + .down_read =3D srcu_torture_down_read, + .up_read =3D srcu_torture_up_read, .readlock_held =3D torture_srcu_read_lock_held, .get_gp_seq =3D srcu_torture_completed, .gp_diff =3D rcu_seq_diff, @@ -839,6 +892,8 @@ static struct rcu_torture_ops srcu_ops =3D { .irq_capable =3D 1, .no_pi_lock =3D IS_ENABLED(CONFIG_TINY_SRCU), .debug_objects =3D 1, + .have_up_down =3D IS_ENABLED(CONFIG_TINY_SRCU) + ? 0 : SRCU_READ_FLAVOR_NORMAL | SRCU_READ_FLAVOR_FAST, .name =3D "srcu" }; =20 @@ -864,6 +919,8 @@ static struct rcu_torture_ops srcud_ops =3D { .read_delay =3D srcu_read_delay, .readunlock =3D srcu_torture_read_unlock, .readlock_held =3D torture_srcu_read_lock_held, + .down_read =3D srcu_torture_down_read, + .up_read =3D srcu_torture_up_read, .get_gp_seq =3D srcu_torture_completed, .gp_diff =3D rcu_seq_diff, .deferred_free =3D srcu_torture_deferred_free, @@ -883,6 +940,8 @@ static struct rcu_torture_ops srcud_ops =3D { .irq_capable =3D 1, .no_pi_lock =3D IS_ENABLED(CONFIG_TINY_SRCU), .debug_objects =3D 1, + .have_up_down =3D IS_ENABLED(CONFIG_TINY_SRCU) + ? 0 : SRCU_READ_FLAVOR_NORMAL | SRCU_READ_FLAVOR_FAST, .name =3D "srcud" }; =20 @@ -1994,7 +2053,7 @@ static void rcutorture_one_extend(int *readstate, int= newstate, bool insoftirq, =20 first =3D idxold1 =3D=3D 0; WARN_ON_ONCE(idxold2 < 0); - WARN_ON_ONCE(idxold2 & ~RCUTORTURE_RDR_ALLBITS); + WARN_ON_ONCE(idxold2 & ~(RCUTORTURE_RDR_ALLBITS | RCUTORTURE_RDR_UPDOWN)); rcutorture_one_extend_check("before change", idxold1, statesnew, statesol= d, insoftirq); rtrsp->rt_readstate =3D newstate; =20 @@ -2070,6 +2129,11 @@ static void rcutorture_one_extend(int *readstate, in= t newstate, bool insoftirq, if (lockit) raw_spin_unlock_irqrestore(¤t->pi_lock, flags); } + if (statesold & RCUTORTURE_RDR_UPDOWN) { + cur_ops->up_read((idxold1 & RCUTORTURE_RDR_MASK_1) >> RCUTORTURE_RDR_SHI= FT_1); + WARN_ON_ONCE(idxnew1 !=3D -1); + idxold1 =3D 0; + } =20 /* Delay if neither beginning nor end and there was a change. */ if ((statesnew || statesold) && *readstate && newstate) @@ -2210,7 +2274,8 @@ static bool rcu_torture_one_read_start(struct rcu_tor= ture_one_read_state *rtorsp rtorsp->started =3D cur_ops->get_gp_seq(); rtorsp->ts =3D rcu_trace_clock_local(); rtorsp->p =3D rcu_dereference_check(rcu_torture_current, - !cur_ops->readlock_held || cur_ops->readlock_held()); + !cur_ops->readlock_held || cur_ops->readlock_held() || + (rtorsp->readstate & RCUTORTURE_RDR_UPDOWN)); if (rtorsp->p =3D=3D NULL) { /* Wait for rcu_torture_writer to get underway */ rcutorture_one_extend(&rtorsp->readstate, 0, myid < 0, trsp, rtorsp->rtr= sp); @@ -2379,6 +2444,121 @@ rcu_torture_reader(void *arg) return 0; } =20 +struct rcu_torture_one_read_state_updown { + struct hrtimer rtorsu_hrt; + bool rtorsu_inuse; + struct torture_random_state rtorsu_trs; + struct rcu_torture_one_read_state rtorsu_rtors; +}; + +static struct rcu_torture_one_read_state_updown *updownreaders; +static DEFINE_TORTURE_RANDOM(rcu_torture_updown_rand); +static int rcu_torture_updown(void *arg); + +static enum hrtimer_restart rcu_torture_updown_hrt(struct hrtimer *hrtp) +{ + struct rcu_torture_one_read_state_updown *rtorsup; + + rtorsup =3D container_of(hrtp, struct rcu_torture_one_read_state_updown, = rtorsu_hrt); + rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, -1= ); + smp_store_release(&rtorsup->rtorsu_inuse, false); + return HRTIMER_NORESTART; +} + +static int rcu_torture_updown_init(void) +{ + int i; + struct torture_random_state *rand =3D &rcu_torture_updown_rand; + int ret; + + if (n_up_down < 0) + return 0; + if (!srcu_torture_have_up_down()) { + VERBOSE_TOROUT_STRING("rcu_torture_updown_init: Disabling up/down reader= tests due to lack of primitives"); + return 0; + } + updownreaders =3D kcalloc(n_up_down, sizeof(*updownreaders), GFP_KERNEL); + if (!updownreaders) { + VERBOSE_TOROUT_STRING("rcu_torture_updown_init: Out of memory, disabling= up/down reader tests"); + return -ENOMEM; + } + for (i =3D 0; i < n_up_down; i++) { + init_rcu_torture_one_read_state(&updownreaders[i].rtorsu_rtors, rand); + hrtimer_setup(&updownreaders[i].rtorsu_hrt, rcu_torture_updown_hrt, CLOC= K_MONOTONIC, + HRTIMER_MODE_REL | HRTIMER_MODE_SOFT); + torture_random_init(&updownreaders[i].rtorsu_trs); + init_rcu_torture_one_read_state(&updownreaders[i].rtorsu_rtors, + &updownreaders[i].rtorsu_trs); + } + ret =3D torture_create_kthread(rcu_torture_updown, rand, updown_task); + if (ret) { + kfree(updownreaders); + updownreaders =3D NULL; + } + return ret; +} + +static void rcu_torture_updown_cleanup(void) +{ + struct rcu_torture_one_read_state_updown *rtorsup; + + for (rtorsup =3D updownreaders; rtorsup < &updownreaders[n_up_down]; rtor= sup++) { + if (!smp_load_acquire(&rtorsup->rtorsu_inuse)) + continue; + if (!hrtimer_cancel(&rtorsup->rtorsu_hrt)) + WARN_ON_ONCE(rtorsup->rtorsu_inuse); + + } + kfree(updownreaders); + updownreaders =3D NULL; +} + +/* + * RCU torture up/down reader kthread, starting RCU readers in kthread + * context and ending them in hrtimer handlers. Otherwise similar to + * rcu_torture_reader(). + */ +static int +rcu_torture_updown(void *arg) +{ + int idx; + int rawidx; + struct rcu_torture_one_read_state_updown *rtorsup; + ktime_t t; + + VERBOSE_TOROUT_STRING("rcu_torture_updown task started"); + do { + for (rtorsup =3D updownreaders; rtorsup < &updownreaders[n_up_down]; rto= rsup++) { + if (torture_must_stop()) + break; + if (smp_load_acquire(&rtorsup->rtorsu_inuse)) + continue; + init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, + &rtorsup->rtorsu_trs); + rawidx =3D cur_ops->down_read(); + idx =3D (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1; + rtorsup->rtorsu_rtors.readstate =3D idx | RCUTORTURE_RDR_UPDOWN; + rtorsup->rtorsu_rtors.rtrsp++; + if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, + &rtorsup->rtorsu_trs, -1)) { + schedule_timeout_idle(HZ); + continue; + } + smp_store_release(&rtorsup->rtorsu_inuse, true); + t =3D torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per millio= n. + if (t < 10 * 1000) + t =3D 200 * 1000 * 1000; + hrtimer_start(&rtorsup->rtorsu_hrt, t, + HRTIMER_MODE_REL | HRTIMER_MODE_SOFT); + } + torture_hrtimeout_ms(1, 1000, &rcu_torture_updown_rand); + stutter_wait("rcu_torture_updown"); + } while (!torture_must_stop()); + rcu_torture_updown_cleanup(); + torture_kthread_stopping("rcu_torture_updown"); + return 0; +} + /* * Randomly Toggle CPUs' callback-offload state. This uses hrtimers to * increase race probabilities and fuzzes the interval between toggling. @@ -2633,7 +2813,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops= *cur_ops, const char *tag) "reader_flavor=3D%x " "nocbs_nthreads=3D%d nocbs_toggle=3D%d " "test_nmis=3D%d " - "preempt_duration=3D%d preempt_interval=3D%d\n", + "preempt_duration=3D%d preempt_interval=3D%d n_up_down=3D%d\n", torture_type, tag, nrealreaders, nrealfakewriters, stat_interval, verbose, test_no_idle_hz, shuffle_interval, stutter, irqreader, fqs_duration, fqs_holdoff, fqs_stutter, @@ -2647,7 +2827,7 @@ rcu_torture_print_module_parms(struct rcu_torture_ops= *cur_ops, const char *tag) reader_flavor, nocbs_nthreads, nocbs_toggle, test_nmis, - preempt_duration, preempt_interval); + preempt_duration, preempt_interval, n_up_down); } =20 static int rcutorture_booster_cleanup(unsigned int cpu) @@ -3750,6 +3930,10 @@ rcu_torture_cleanup(void) nocb_tasks =3D NULL; } =20 + if (updown_task) { + torture_stop_kthread(rcu_torture_updown, updown_task); + updown_task =3D NULL; + } if (reader_tasks) { for (i =3D 0; i < nrealreaders; i++) torture_stop_kthread(rcu_torture_reader, @@ -4284,6 +4468,9 @@ rcu_torture_init(void) if (torture_init_error(firsterr)) goto unwind; =20 + firsterr =3D rcu_torture_updown_init(); + if (torture_init_error(firsterr)) + goto unwind; nrealnocbers =3D nocbs_nthreads; if (WARN_ON(nrealnocbers < 0)) nrealnocbers =3D 1; --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E72D290D94; Wed, 9 Jul 2025 10:43:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057780; cv=none; b=IwkQpfV8YKSEUcjHQp/OTr8ZL+DaQpWZ0RH6kHpjFqqGPxA8Sfv6W37xdpQK/MBwIadiNQxFprfOS9lvKodFfyysCa8QrfVGsGW5/VMWKyTs72oIInxBCVf7+dXcK5j6h2+B3rH25gmYL1yvA1AvfUyCj+vyeQfGx3sHmKfuPHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057780; c=relaxed/simple; bh=TfM5r+t9W543sU7xGWHEO3cseVE1ObpCWpbwoWQe2rI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IyvZNMH4slUCLwnGgVVt/Ru25t6R+8QnKxFef+DTvBlXLUTlByfanwwGNSfMBTCnGIfFX+xZYSTKszmwcFTHS5Ua9HGPLiwB7cNwKYpNCCHZOKi6JuWexp5hbXyGcbX4s44gpDAWmrGx9lNi3F87+jbItDh5byxuhvW+TTae3S0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lliWGBG/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lliWGBG/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 41D60C4CEEF; Wed, 9 Jul 2025 10:42:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057780; bh=TfM5r+t9W543sU7xGWHEO3cseVE1ObpCWpbwoWQe2rI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lliWGBG/IAfEXuxRZXPO1z+qWbqIRx/kqy1stM3Su8siZkXQu9KQ9J5VDV7HbYkhz Ca4iZm1BfmvhBILl7rK62Ujp+KvSu+B+eg3a1pwDi+QV2jxP9O8D7WEtStjJgVQ0iW B0qlbLR9eV/deX04RR2teMbSsEaqsbnvnrAl5PUmVemy1iXZHKWCYCViyDsOn1jivb MbrvBvNN1IMt6KKM7fzeGnYUcDbTbyNC4WRtry8eRWBLnNul5ySrxA28pkeWyb9fDc mHpyea/n8dFuDZcsrJU1m/wavsrCbhZwGoCvvziK7RYkXeB19XfxmWUtz2wtCf4fCT PfoNz30hgPWBA== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 05/15] rcutorture: Pull rcu_torture_updown() loop body into new function Date: Wed, 9 Jul 2025 16:12:05 +0530 Message-Id: <20250709104215.15562-6-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" This is strictly a code-movement commit, pulling that part of the rcu_torture_updown() function's loop body that processes one rcu_torture_one_read_state_updown structure into a new rcu_torture_updown_one() function. The checks for the end of the torture test and the current structure being in use remain in the rcu_torture_updown() function. Signed-off-by: Paul E. McKenney Signed-off-by: Joel Fernandes Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 44 ++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index bf87c0c4e77e..13cf0e472868 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -2513,6 +2513,29 @@ static void rcu_torture_updown_cleanup(void) updownreaders =3D NULL; } =20 +// Do one reader for rcu_torture_updown(). +static void rcu_torture_updown_one(struct rcu_torture_one_read_state_updow= n *rtorsup) +{ + int idx; + int rawidx; + ktime_t t; + + init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_= trs); + rawidx =3D cur_ops->down_read(); + idx =3D (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1; + rtorsup->rtorsu_rtors.readstate =3D idx | RCUTORTURE_RDR_UPDOWN; + rtorsup->rtorsu_rtors.rtrsp++; + if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_= trs, -1)) { + schedule_timeout_idle(HZ); + return; + } + smp_store_release(&rtorsup->rtorsu_inuse, true); + t =3D torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million. + if (t < 10 * 1000) + t =3D 200 * 1000 * 1000; + hrtimer_start(&rtorsup->rtorsu_hrt, t, HRTIMER_MODE_REL | HRTIMER_MODE_SO= FT); +} + /* * RCU torture up/down reader kthread, starting RCU readers in kthread * context and ending them in hrtimer handlers. Otherwise similar to @@ -2521,10 +2544,7 @@ static void rcu_torture_updown_cleanup(void) static int rcu_torture_updown(void *arg) { - int idx; - int rawidx; struct rcu_torture_one_read_state_updown *rtorsup; - ktime_t t; =20 VERBOSE_TOROUT_STRING("rcu_torture_updown task started"); do { @@ -2533,23 +2553,7 @@ rcu_torture_updown(void *arg) break; if (smp_load_acquire(&rtorsup->rtorsu_inuse)) continue; - init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, - &rtorsup->rtorsu_trs); - rawidx =3D cur_ops->down_read(); - idx =3D (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1; - rtorsup->rtorsu_rtors.readstate =3D idx | RCUTORTURE_RDR_UPDOWN; - rtorsup->rtorsu_rtors.rtrsp++; - if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, - &rtorsup->rtorsu_trs, -1)) { - schedule_timeout_idle(HZ); - continue; - } - smp_store_release(&rtorsup->rtorsu_inuse, true); - t =3D torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per millio= n. - if (t < 10 * 1000) - t =3D 200 * 1000 * 1000; - hrtimer_start(&rtorsup->rtorsu_hrt, t, - HRTIMER_MODE_REL | HRTIMER_MODE_SOFT); + rcu_torture_updown_one(rtorsup); } torture_hrtimeout_ms(1, 1000, &rcu_torture_updown_rand); stutter_wait("rcu_torture_updown"); --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 258502586EA; Wed, 9 Jul 2025 10:43:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057787; cv=none; b=NrixcBeTK4jfrOAKFXkteBPmohXrJ2avgzNVwl6DqOEVXtkWWcZ7NgNlbRoghja4dl3lBZlUL1koX3o7kaDE3Dm0JsqawKB6gQGGPCSP/gQ/YANxehgHODC20Qb26pyNwSkHQfjNqyu0YXXG4+ztEMtJ7Xp39T47NZDKRH4RKhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057787; c=relaxed/simple; bh=kP4pd/r/UqjMWTtaJcvV3OjNwAqsSwjeQjQVlhXCs9U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=N962Q5ZEzIKe5aEuyuIi0SWD4NiSEIqC4+fjJHcI4WBvP3ex4U4BPp02Am6sC1Xf5Im9j5kBKThjsPT78VhfCrXuZbSAyb/iaryzNuyM4/Lmhdh8nrvjNKWHwlScsWU6oXII2sbMgfG0G8ofs6Dy0tPrqnUU4EJs6mxIgBwWKVs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UVxVSnV0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UVxVSnV0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED735C4CEEF; Wed, 9 Jul 2025 10:43:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057787; bh=kP4pd/r/UqjMWTtaJcvV3OjNwAqsSwjeQjQVlhXCs9U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UVxVSnV0B75pwGodw2uClJeCiG01uRNUYinHJw/ZtMUoncbc4P+W86mCyQU2+C6y7 Y4SwVdfqLIVWV+vctexTxXZAczn43QNjzkGPj/2cNsMuZH4kVhq2VkWEhJ6Ys2jntD c/cBm5al02FDNZ6JmeTh/2DJmlhKDpPqQ/thWtKWk1ps6iCkJfNQLBBZijH9mZEugW 2YyAPSsLcWRlK2WZQIcbXyYa69uI8i17pTkhfyVQk5OPajUY2Ex7QYk5avh06Af42g 2kelwv6u19Epk5kC+6KXC19Ggx1aLMQCbQA8rn7h+DPoeQbs4Qt6d0U694jCExGlbU n6ewJPUMdUIBA== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" , kernel test robot Subject: [PATCH rcu 06/15] rcutorture: Complain if an ->up_read() is delayed more than 10 seconds Date: Wed, 9 Jul 2025 16:12:06 +0530 Message-Id: <20250709104215.15562-7-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" The down/up SRCU reader testing uses an hrtimer handler to exit the SRCU read-side critical section. This might be delayed, and if delayed for too long, it can prevent the rcutorture run from completing. This commit therefore complains if the hrtimer handler is delayed for more than ten seconds. [ paulmck, joel: Apply kernel test robot feedback to avoid false-positive complaint of excessive ->up_read() delays by using HRTIMER_MODE_HARD ] Tested-by: kernel test robot Signed-off-by: Paul E. McKenney Signed-off-by: Joel Fernandes Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 13cf0e472868..22288efc8c67 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -2447,6 +2447,8 @@ rcu_torture_reader(void *arg) struct rcu_torture_one_read_state_updown { struct hrtimer rtorsu_hrt; bool rtorsu_inuse; + ktime_t rtorsu_kt; + unsigned long rtorsu_j; struct torture_random_state rtorsu_trs; struct rcu_torture_one_read_state rtorsu_rtors; }; @@ -2485,7 +2487,7 @@ static int rcu_torture_updown_init(void) for (i =3D 0; i < n_up_down; i++) { init_rcu_torture_one_read_state(&updownreaders[i].rtorsu_rtors, rand); hrtimer_setup(&updownreaders[i].rtorsu_hrt, rcu_torture_updown_hrt, CLOC= K_MONOTONIC, - HRTIMER_MODE_REL | HRTIMER_MODE_SOFT); + HRTIMER_MODE_REL | HRTIMER_MODE_HARD); torture_random_init(&updownreaders[i].rtorsu_trs); init_rcu_torture_one_read_state(&updownreaders[i].rtorsu_rtors, &updownreaders[i].rtorsu_trs); @@ -2533,7 +2535,10 @@ static void rcu_torture_updown_one(struct rcu_tortur= e_one_read_state_updown *rto t =3D torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million. if (t < 10 * 1000) t =3D 200 * 1000 * 1000; - hrtimer_start(&rtorsup->rtorsu_hrt, t, HRTIMER_MODE_REL | HRTIMER_MODE_SO= FT); + hrtimer_start(&rtorsup->rtorsu_hrt, t, HRTIMER_MODE_REL | HRTIMER_MODE_HA= RD); + smp_mb(); // Sample jiffies after posting hrtimer. + rtorsup->rtorsu_j =3D jiffies; // Not used by hrtimer handler. + rtorsup->rtorsu_kt =3D t; } =20 /* @@ -2544,6 +2549,7 @@ static void rcu_torture_updown_one(struct rcu_torture= _one_read_state_updown *rto static int rcu_torture_updown(void *arg) { + unsigned long j; struct rcu_torture_one_read_state_updown *rtorsup; =20 VERBOSE_TOROUT_STRING("rcu_torture_updown task started"); @@ -2551,8 +2557,12 @@ rcu_torture_updown(void *arg) for (rtorsup =3D updownreaders; rtorsup < &updownreaders[n_up_down]; rto= rsup++) { if (torture_must_stop()) break; - if (smp_load_acquire(&rtorsup->rtorsu_inuse)) + j =3D smp_load_acquire(&jiffies); // Time before ->rtorsu_inuse. + if (smp_load_acquire(&rtorsup->rtorsu_inuse)) { + WARN_ONCE(time_after(j, rtorsup->rtorsu_j + 1 + HZ * 10), + "hrtimer queued at jiffies %lu for %lld ns took %lu jiffies\n", rto= rsup->rtorsu_j, rtorsup->rtorsu_kt, j - rtorsup->rtorsu_j); continue; + } rcu_torture_updown_one(rtorsup); } torture_hrtimeout_ms(1, 1000, &rcu_torture_updown_rand); --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3BB282918DE; Wed, 9 Jul 2025 10:43:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057794; cv=none; b=qLlTecmlric50S80VhprNumLjU9Z/vnSxbyfgx4DHDSuRleU8/iIttitKFhHC1x+3s92gFnSc49CKK9odoB6nKGXFuUmLko/T4wtsjZjtG3yZCDkoiyMFP1hCYmI+VOz7nT9n801b0hrrZdvi/FbEj3WX6itjUDIGPQRJUByLKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057794; c=relaxed/simple; bh=SNPLFBpiKo7+F2IHAJdiaq/+KUvKNSLOdScapqS6Tis=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fC7zx213YzO5dG5ORFYShl+ju6aNIXFwwB3EaAek0A42CZ+Yjet7iyJ7i+jS5qtRU32wsXvy68I8+7eU0BPqJ6RnuT+uXnRtlwt6A8nh3EiJhnVXayuhqRhlENa5kMI9hDqcko0Haal2e1xtplU1ruGuo8vmWDed3Zq2/5zU7hw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OP00ZnQ4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OP00ZnQ4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B11EBC4CEEF; Wed, 9 Jul 2025 10:43:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057793; bh=SNPLFBpiKo7+F2IHAJdiaq/+KUvKNSLOdScapqS6Tis=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OP00ZnQ4Wmbxivt1ptEZ0UfI2/HZRwmbw5e/0v2J3Mh738U25pqCKMTcuEHr7hUjb NQ1GH9UzwVvsEVsMVwOwGSgwc63s72MbB2kRC+aJ46lXqTjj1Ieu5Y4gup1MTeVXtl W+H9lNOcgGX7/rwvR2F9SJ0ocjCBgiYZ1Kk5f5o4t8H2M6a+x81PF1EuBiNhauuy6v F4mfHhZbwX/gNcxyUvqTRBsvaX4im3EsYC/yZBjkNBWF7H/NgEJ651YhDnbzHm+y6F /YbMwbqUVvX5ZWe0S1icRF5gsSj+mZTh0PG5KZN+2gmNwTFLSWslBmRP3DwBDMynnl M5sHcn4zr/fVg== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" , kernel test robot Subject: [PATCH rcu 07/15] rcutorture: Check for ->up_read() without matching ->down_read() Date: Wed, 9 Jul 2025 16:12:07 +0530 Message-Id: <20250709104215.15562-8-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" This commit creates counters in the rcu_torture_one_read_state_updown structure that check for a call to ->up_read() that lacks a matching call to ->down_read(). While in the area, add end-of-run cleanup code that prevents calls to rcu_torture_updown_hrt() from happening after the test has moved on. Yes, the srcu_barrier() at the end of the test will wait for them, but this could result in confusing states, statistics, and diagnostic information. So explicitly wait for them before we get to the end-of-test output. [ paulmck: Apply kernel test robot feedback. ] [ joel: Apply Boqun's fix for counter increment ordering. ] Signed-off-by: Paul E. McKenney Tested-by: kernel test robot Signed-off-by: Joel Fernandes Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 22288efc8c67..f773d4f8f2ae 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -2449,6 +2449,8 @@ struct rcu_torture_one_read_state_updown { bool rtorsu_inuse; ktime_t rtorsu_kt; unsigned long rtorsu_j; + unsigned long rtorsu_ndowns; + unsigned long rtorsu_nups; struct torture_random_state rtorsu_trs; struct rcu_torture_one_read_state rtorsu_rtors; }; @@ -2463,6 +2465,8 @@ static enum hrtimer_restart rcu_torture_updown_hrt(st= ruct hrtimer *hrtp) =20 rtorsup =3D container_of(hrtp, struct rcu_torture_one_read_state_updown, = rtorsu_hrt); rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, -1= ); + WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up witho= ut matching down #%zu.\n", __func__, rtorsup - updownreaders); + rtorsup->rtorsu_nups++; smp_store_release(&rtorsup->rtorsu_inuse, false); return HRTIMER_NORESTART; } @@ -2507,8 +2511,12 @@ static void rcu_torture_updown_cleanup(void) for (rtorsup =3D updownreaders; rtorsup < &updownreaders[n_up_down]; rtor= sup++) { if (!smp_load_acquire(&rtorsup->rtorsu_inuse)) continue; - if (!hrtimer_cancel(&rtorsup->rtorsu_hrt)) - WARN_ON_ONCE(rtorsup->rtorsu_inuse); + if (hrtimer_cancel(&rtorsup->rtorsu_hrt) || WARN_ON_ONCE(rtorsup->rtorsu= _inuse)) { + rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, = -1); + WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up wit= hout matching down #%zu.\n", __func__, rtorsup - updownreaders); + rtorsup->rtorsu_nups++; + smp_store_release(&rtorsup->rtorsu_inuse, false); + } =20 } kfree(updownreaders); @@ -2524,10 +2532,13 @@ static void rcu_torture_updown_one(struct rcu_tortu= re_one_read_state_updown *rto =20 init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_= trs); rawidx =3D cur_ops->down_read(); + rtorsup->rtorsu_ndowns++; idx =3D (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1; rtorsup->rtorsu_rtors.readstate =3D idx | RCUTORTURE_RDR_UPDOWN; rtorsup->rtorsu_rtors.rtrsp++; if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_= trs, -1)) { + WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up with= out matching down #%zu.\n", __func__, rtorsup - updownreaders); + rtorsup->rtorsu_nups++; schedule_timeout_idle(HZ); return; } --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A46BF28DB5D; Wed, 9 Jul 2025 10:43:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057799; cv=none; b=f+qzLwRWa5/xFrka2OQ5O9TzvXqp8cdihdeXtjeV1kUG2xINx2kFpvMV0wDoCNUxU+/vxGx9hkaZzNjPY5uTE6h9CY30d0zuvb8IcU3olFRTMi/Xch0QNKCUibrS59AUnq8piaMJgHanGaUCN7/FSPAtGMBJK4ulsW8yFc4hfWA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057799; c=relaxed/simple; bh=6qbMqWsJuVvvTWS+gO5LrsfTdlSB6Hd/6dmtTEFxq1U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hmh+ZSNGcq1ixGYuoUcr43aA0dX2sQfdykaf64eU6eVUKZlJPybn33SRfXbPZzhnNMlD2BkyvVYnKYozPNDy096+IYWzDOfIVVYAJqHu+bynmru6BXKst9LgA1KPv92e+r6ff5G2lPoAiXrFFlzPnfpMSLPq7U+nWxGQH/6EsPk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c+oAG77J; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="c+oAG77J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6DC77C4CEEF; Wed, 9 Jul 2025 10:43:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057799; bh=6qbMqWsJuVvvTWS+gO5LrsfTdlSB6Hd/6dmtTEFxq1U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c+oAG77JmwfOmK7IRxWVcaSrZQkGT6KydkHcPzp9W1X2dYdc4UXUy1TKjlBiu6N5p dB/fpKXugYnN5ARG67To28K+FK8q9anHg2DWFqgYvv7IQAoUce1pUT/Wn5Cw1F9Y4S dtmRwvL1wtVxMt7GPOmoa8ZHbnMgdfN4BymRxQc1/+xPX+IDxoVlpaY3VWrP7buQen 5+AxKP2GVBVImdrziQkCIZSkJab6JDGqUQcZcjYkAeB50OBz54sCsV2CA6ZIX9fdYC ZPhpAFnpuf4qweDkGgr2lyyL3rSOEsTzW2ctSGAY+9OXKx8+C2oonbCErOhhYFA9UD UcX7mex8U2OKQ== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 08/15] rcutorture: Check for no up/down readers at task level Date: Wed, 9 Jul 2025 16:12:08 +0530 Message-Id: <20250709104215.15562-9-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" The design of testing of up/down readers such as srcu_down_read() and srcu_up_read() assumes that these are tested only by the rcu_torture_updown() kthread, and never by the rcu_torture_reader() kthread. Because we all know which road is paved with good intentions, this commit adds WARN_ON_ONCE() to verify that things are going to plan. Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index f773d4f8f2ae..10f3cc4861ee 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -2232,6 +2232,7 @@ rcutorture_loop_extend(int *readstate, bool insoftirq= , struct torture_random_sta i =3D ((i | (i >> 3)) & RCUTORTURE_RDR_MAX_LOOPS) + 1; for (j =3D 0; j < i; j++) { mask =3D rcutorture_extend_mask(*readstate, trsp); + WARN_ON_ONCE(mask & RCUTORTURE_RDR_UPDOWN); rcutorture_one_extend(readstate, mask, insoftirq, trsp, &rtrsp[j]); } return &rtrsp[j]; @@ -2368,6 +2369,7 @@ static bool rcu_torture_one_read(struct torture_rando= m_state *trsp, long myid) WARN_ON_ONCE(!rcu_is_watching()); init_rcu_torture_one_read_state(&rtors, trsp); newstate =3D rcutorture_extend_mask(rtors.readstate, trsp); + WARN_ON_ONCE(newstate & RCUTORTURE_RDR_UPDOWN); rcutorture_one_extend(&rtors.readstate, newstate, myid < 0, trsp, rtors.r= trsp++); if (!rcu_torture_one_read_start(&rtors, trsp, myid)) { rcutorture_one_extend(&rtors.readstate, 0, myid < 0, trsp, rtors.rtrsp); --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9684D21766A; Wed, 9 Jul 2025 10:43:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057805; cv=none; b=A8DCSuvgfmFlcC7p6jaRqfbDDYyoOChUru5o2te1AYgs9p0qDTy3ZBf21e9/QxzKqiZprsSJrRm47OLSkBi0YjaFQ5/RlbhQKdX+9DftGiZmb9XrQMCjjob6wcQ5oQ1Dr7aDxAniT3k9UQO6aZ1vOXNYONACi1tIFJXJsRPqOBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057805; c=relaxed/simple; bh=w0ultm8tcpppshfn+Iwj+Nx3B7+l8kg1Bdk2vOBcOKw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oSguC0OKGQ7sn6ctc3dREFQWKT4U+vVZ/JcffYtn60msNoowohTegRsv9ShENYDYPD4+l17Rugd+nhlcxk+oUxfo0N7DW4jFgxuPRAclXDCgufjbNfV6J5aBU/4/QYMokQ7t0TMF8cKQVA157bQNQf5muUlO3U96sPME2t72mGM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cAvzB56b; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cAvzB56b" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EF3ACC4CEEF; Wed, 9 Jul 2025 10:43:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057805; bh=w0ultm8tcpppshfn+Iwj+Nx3B7+l8kg1Bdk2vOBcOKw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cAvzB56ba9+mAjp2vx8tfBU4/7w2/W3pVGv/jVH83Bp3MJLWWueYmAj6ycmxiMjwR UY1Z2gp6qUVNXKumWI5kh4osXnqp5XM42VgGbkM+khl3xVlVc9nPOocScUruh4Qz3z 6j2u2BJvJdfw+Uz++2l8VnLG6NX0UGOOjpRg0vndkq8Fc0hBDIs8rdCeH0pDijwd0u TBN82VTQyGPGr15xrzIxFTZNYXbYs8WqcNlIMSpogrXMD0oToMjOw0RwQjjoRPG20Q lrqmWR1sH9FZbex3i9ydeRpKX0juQbRrwvxtDutrCur8t+wMU7JTZQROALOF1jH4yP 06gBS6J1XAhtw== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 09/15] rcutorture: Print number of RCU up/down readers and migrations Date: Wed, 9 Jul 2025 16:12:09 +0530 Message-Id: <20250709104215.15562-10-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" This commit prints the number of RCU up/down readers and the number of such readers that migrated from one CPU to another, along with the rest of the periodic rcu_torture_stats_print() output. These statistics are currently used only by srcu_down_read{,_fast}() and srcu_up_read(,_fast)(). Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 10f3cc4861ee..3f644b1f5823 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -2450,9 +2450,11 @@ struct rcu_torture_one_read_state_updown { struct hrtimer rtorsu_hrt; bool rtorsu_inuse; ktime_t rtorsu_kt; + int rtorsu_cpu; unsigned long rtorsu_j; unsigned long rtorsu_ndowns; unsigned long rtorsu_nups; + unsigned long rtorsu_nmigrates; struct torture_random_state rtorsu_trs; struct rcu_torture_one_read_state rtorsu_rtors; }; @@ -2463,12 +2465,15 @@ static int rcu_torture_updown(void *arg); =20 static enum hrtimer_restart rcu_torture_updown_hrt(struct hrtimer *hrtp) { + int cpu =3D raw_smp_processor_id(); struct rcu_torture_one_read_state_updown *rtorsup; =20 rtorsup =3D container_of(hrtp, struct rcu_torture_one_read_state_updown, = rtorsu_hrt); rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, -1= ); WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up witho= ut matching down #%zu.\n", __func__, rtorsup - updownreaders); - rtorsup->rtorsu_nups++; + WRITE_ONCE(rtorsup->rtorsu_nups, rtorsup->rtorsu_nups + 1); + WRITE_ONCE(rtorsup->rtorsu_nmigrates, + rtorsup->rtorsu_nmigrates + (cpu !=3D rtorsup->rtorsu_cpu)); smp_store_release(&rtorsup->rtorsu_inuse, false); return HRTIMER_NORESTART; } @@ -2516,7 +2521,7 @@ static void rcu_torture_updown_cleanup(void) if (hrtimer_cancel(&rtorsup->rtorsu_hrt) || WARN_ON_ONCE(rtorsup->rtorsu= _inuse)) { rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, = -1); WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up wit= hout matching down #%zu.\n", __func__, rtorsup - updownreaders); - rtorsup->rtorsu_nups++; + WRITE_ONCE(rtorsup->rtorsu_nups, rtorsup->rtorsu_nups + 1); smp_store_release(&rtorsup->rtorsu_inuse, false); } =20 @@ -2534,13 +2539,14 @@ static void rcu_torture_updown_one(struct rcu_tortu= re_one_read_state_updown *rto =20 init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_= trs); rawidx =3D cur_ops->down_read(); - rtorsup->rtorsu_ndowns++; + WRITE_ONCE(rtorsup->rtorsu_ndowns, rtorsup->rtorsu_ndowns + 1); idx =3D (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1; rtorsup->rtorsu_rtors.readstate =3D idx | RCUTORTURE_RDR_UPDOWN; rtorsup->rtorsu_rtors.rtrsp++; + rtorsup->rtorsu_cpu =3D raw_smp_processor_id(); if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_= trs, -1)) { WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up with= out matching down #%zu.\n", __func__, rtorsup - updownreaders); - rtorsup->rtorsu_nups++; + WRITE_ONCE(rtorsup->rtorsu_nups, rtorsup->rtorsu_nups + 1); schedule_timeout_idle(HZ); return; } @@ -2649,6 +2655,10 @@ rcu_torture_stats_print(void) long pipesummary[RCU_TORTURE_PIPE_LEN + 1] =3D { 0 }; long batchsummary[RCU_TORTURE_PIPE_LEN + 1] =3D { 0 }; long n_gpwraps =3D 0; + unsigned long ndowns =3D 0; + unsigned long nunexpired =3D 0; + unsigned long nmigrates =3D 0; + unsigned long nups =3D 0; struct rcu_torture *rtcp; static unsigned long rtcv_snap =3D ULONG_MAX; static bool splatted; @@ -2662,10 +2672,18 @@ rcu_torture_stats_print(void) if (cur_ops->get_gpwrap_count) n_gpwraps +=3D cur_ops->get_gpwrap_count(cpu); } + if (updownreaders) { + for (i =3D 0; i < n_up_down; i++) { + ndowns +=3D READ_ONCE(updownreaders[i].rtorsu_ndowns); + nups +=3D READ_ONCE(updownreaders[i].rtorsu_nups); + nunexpired +=3D READ_ONCE(updownreaders[i].rtorsu_inuse); + nmigrates +=3D READ_ONCE(updownreaders[i].rtorsu_nmigrates); + } + } for (i =3D RCU_TORTURE_PIPE_LEN; i >=3D 0; i--) { if (pipesummary[i] !=3D 0) break; - } + } // The value of variable "i" is used later, so don't clobber it! =20 pr_alert("%s%s ", torture_type, TORTURE_FLAG); rtcp =3D rcu_access_pointer(rcu_torture_current); @@ -2686,6 +2704,8 @@ rcu_torture_stats_print(void) n_rcu_torture_boost_failure, n_rcu_torture_boosts, atomic_long_read(&n_rcu_torture_timers)); + if (updownreaders) + pr_cont("ndowns: %lu nups: %lu nhrt: %lu nmigrates: %lu ", ndowns, nups,= nunexpired, nmigrates); torture_onoff_stats(); pr_cont("barrier: %ld/%ld:%ld ", data_race(n_barrier_successes), --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 447E1292B2B; Wed, 9 Jul 2025 10:43:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057811; cv=none; b=gzOVDBNY7E8WVqDqKgENN2VKp17KC5O6vUbZVYQ3y1bNBHXmPe5/gllM4XSOrAG49+NVKzm+Y2cPnKOzWDrtWudxEE473IZmIWs2BjQ4X7i8LTkOLSxFvr10zCxQ4EJMmXpglZ5SbXyPU04RSVrFCyHBffsgkPqCYwWZuchjprM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057811; c=relaxed/simple; bh=g5ytatk8FR+ZKb3V98rWAdbM2uy/6s4y3Qm5Q/BRvEk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MZGSUwl+motH2CvER7chdg1GbzIuBqjyfk0bKDuO35U7ZAbpETuMq65noD1Hz0OYRVloIDKBRvU6D0h662Rw/F3qstmvOTrJUhpc+o1Ux5XtGEafYrBBWyu0rVzhgUv8ClK6Mzn4czjrigJc4YeK42UAD/mNEdlqVH9DzgDG8ww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GuDkwAul; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GuDkwAul" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE7DEC4CEEF; Wed, 9 Jul 2025 10:43:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057811; bh=g5ytatk8FR+ZKb3V98rWAdbM2uy/6s4y3Qm5Q/BRvEk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GuDkwAul6vv3iGcz4uiC9mmCJtmD6iac6r5sXx2HHShs64gSgHD4XKWzbiGHQEPaO VUv0k3+gcnpQ7tssLZpOFzNrKLrXtARk1vfGdVMWKoXR4M/CuadnjZM0D55Uc6p3dU cpgWnTYGDri0CIjJ4aUqKRsBEfR6Qkk6TvyA9jlN3se6bWKdDGr+G47784BJgIenHF Jyht18xs/pNyNyGvlm83EGNxL6M7P68BS/E9yLxQZF30lLTJ4pAwpvTh2GlgleSljo XxqZiabnsiVWJmsiJbFv4fk6uR9w76MZwawBIW6QgLQsbMYXO4yNpwa54UePRQ7Y8J g8VbhKZvUsf7g== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" , kernel test robot Subject: [PATCH rcu 10/15] rcutorture: Drop redundant "insoftirq" parameters Date: Wed, 9 Jul 2025 16:12:10 +0530 Message-Id: <20250709104215.15562-11-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" Given that the rcutorture_one_extend_check() function now uses in_serving_softirq() and in_hardirq(), it is no longer necessary to pass insoftirq flags down the function-call stack. This commit therefore removes those flags, and, while in the area, does a bit of whitespace cleanup. Signed-off-by: Paul E. McKenney Tested-by: kernel test robot Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 3f644b1f5823..470b5a117602 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1975,7 +1975,7 @@ static void rcu_torture_reader_do_mbchk(long myid, st= ruct rcu_torture *rtp, =20 // Verify the specified RCUTORTURE_RDR* state. #define ROEC_ARGS "%s %s: Current %#x To add %#x To remove %#x preempt_= count() %#x\n", __func__, s, curstate, new, old, preempt_count() -static void rcutorture_one_extend_check(char *s, int curstate, int new, in= t old, bool insoftirq) +static void rcutorture_one_extend_check(char *s, int curstate, int new, in= t old) { int mask; =20 @@ -2038,8 +2038,7 @@ static void rcutorture_one_extend_check(char *s, int = curstate, int new, int old, * beginning or end of the critical section and if there was actually a * change, do a ->read_delay(). */ -static void rcutorture_one_extend(int *readstate, int newstate, bool insof= tirq, - struct torture_random_state *trsp, +static void rcutorture_one_extend(int *readstate, int newstate, struct tor= ture_random_state *trsp, struct rt_read_seg *rtrsp) { bool first; @@ -2054,7 +2053,7 @@ static void rcutorture_one_extend(int *readstate, int= newstate, bool insoftirq, first =3D idxold1 =3D=3D 0; WARN_ON_ONCE(idxold2 < 0); WARN_ON_ONCE(idxold2 & ~(RCUTORTURE_RDR_ALLBITS | RCUTORTURE_RDR_UPDOWN)); - rcutorture_one_extend_check("before change", idxold1, statesnew, statesol= d, insoftirq); + rcutorture_one_extend_check("before change", idxold1, statesnew, statesol= d); rtrsp->rt_readstate =3D newstate; =20 /* First, put new protection in place to avoid critical-section gap. */ @@ -2074,8 +2073,7 @@ static void rcutorture_one_extend(int *readstate, int= newstate, bool insoftirq, idxnew2 =3D (cur_ops->readlock() << RCUTORTURE_RDR_SHIFT_2) & RCUTORTURE= _RDR_MASK_2; =20 // Complain unless both the old and the new protection is in place. - rcutorture_one_extend_check("during change", - idxold1 | statesnew, statesnew, statesold, insoftirq); + rcutorture_one_extend_check("during change", idxold1 | statesnew, statesn= ew, statesold); =20 // Sample CPU under both sets of protections to reduce confusion. if (IS_ENABLED(CONFIG_RCU_TORTURE_TEST_LOG_CPU)) { @@ -2150,7 +2148,7 @@ static void rcutorture_one_extend(int *readstate, int= newstate, bool insoftirq, WARN_ON_ONCE(*readstate < 0); if (WARN_ON_ONCE(*readstate & ~RCUTORTURE_RDR_ALLBITS)) pr_info("Unexpected readstate value of %#x\n", *readstate); - rcutorture_one_extend_check("after change", *readstate, statesnew, states= old, insoftirq); + rcutorture_one_extend_check("after change", *readstate, statesnew, states= old); } =20 /* Return the biggest extendables mask given current RCU and boot paramete= rs. */ @@ -2217,8 +2215,7 @@ rcutorture_extend_mask(int oldmask, struct torture_ra= ndom_state *trsp) * critical section. */ static struct rt_read_seg * -rcutorture_loop_extend(int *readstate, bool insoftirq, struct torture_rand= om_state *trsp, - struct rt_read_seg *rtrsp) +rcutorture_loop_extend(int *readstate, struct torture_random_state *trsp, = struct rt_read_seg *rtrsp) { int i; int j; @@ -2233,7 +2230,7 @@ rcutorture_loop_extend(int *readstate, bool insoftirq= , struct torture_random_sta for (j =3D 0; j < i; j++) { mask =3D rcutorture_extend_mask(*readstate, trsp); WARN_ON_ONCE(mask & RCUTORTURE_RDR_UPDOWN); - rcutorture_one_extend(readstate, mask, insoftirq, trsp, &rtrsp[j]); + rcutorture_one_extend(readstate, mask, trsp, &rtrsp[j]); } return &rtrsp[j]; } @@ -2279,7 +2276,7 @@ static bool rcu_torture_one_read_start(struct rcu_tor= ture_one_read_state *rtorsp (rtorsp->readstate & RCUTORTURE_RDR_UPDOWN)); if (rtorsp->p =3D=3D NULL) { /* Wait for rcu_torture_writer to get underway */ - rcutorture_one_extend(&rtorsp->readstate, 0, myid < 0, trsp, rtorsp->rtr= sp); + rcutorture_one_extend(&rtorsp->readstate, 0, trsp, rtorsp->rtrsp); return false; } if (rtorsp->p->rtort_mbtest =3D=3D 0) @@ -2293,7 +2290,7 @@ static bool rcu_torture_one_read_start(struct rcu_tor= ture_one_read_state *rtorsp * critical sections and check for errors. */ static void rcu_torture_one_read_end(struct rcu_torture_one_read_state *rt= orsp, - struct torture_random_state *trsp, long myid) + struct torture_random_state *trsp) { int i; unsigned long completed; @@ -2340,7 +2337,7 @@ static void rcu_torture_one_read_end(struct rcu_tortu= re_one_read_state *rtorsp, } if (cur_ops->reader_blocked) preempted =3D cur_ops->reader_blocked(); - rcutorture_one_extend(&rtorsp->readstate, 0, myid < 0, trsp, rtorsp->rtrs= p); + rcutorture_one_extend(&rtorsp->readstate, 0, trsp, rtorsp->rtrsp); WARN_ON_ONCE(rtorsp->readstate); // This next splat is expected behavior if leakpointer, especially // for CONFIG_RCU_STRICT_GRACE_PERIOD=3Dy kernels. @@ -2370,13 +2367,13 @@ static bool rcu_torture_one_read(struct torture_ran= dom_state *trsp, long myid) init_rcu_torture_one_read_state(&rtors, trsp); newstate =3D rcutorture_extend_mask(rtors.readstate, trsp); WARN_ON_ONCE(newstate & RCUTORTURE_RDR_UPDOWN); - rcutorture_one_extend(&rtors.readstate, newstate, myid < 0, trsp, rtors.r= trsp++); + rcutorture_one_extend(&rtors.readstate, newstate, trsp, rtors.rtrsp++); if (!rcu_torture_one_read_start(&rtors, trsp, myid)) { - rcutorture_one_extend(&rtors.readstate, 0, myid < 0, trsp, rtors.rtrsp); + rcutorture_one_extend(&rtors.readstate, 0, trsp, rtors.rtrsp); return false; } - rtors.rtrsp =3D rcutorture_loop_extend(&rtors.readstate, myid < 0, trsp, = rtors.rtrsp); - rcu_torture_one_read_end(&rtors, trsp, myid); + rtors.rtrsp =3D rcutorture_loop_extend(&rtors.readstate, trsp, rtors.rtrs= p); + rcu_torture_one_read_end(&rtors, trsp); return true; } =20 @@ -2469,7 +2466,7 @@ static enum hrtimer_restart rcu_torture_updown_hrt(st= ruct hrtimer *hrtp) struct rcu_torture_one_read_state_updown *rtorsup; =20 rtorsup =3D container_of(hrtp, struct rcu_torture_one_read_state_updown, = rtorsu_hrt); - rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, -1= ); + rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs); WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up witho= ut matching down #%zu.\n", __func__, rtorsup - updownreaders); WRITE_ONCE(rtorsup->rtorsu_nups, rtorsup->rtorsu_nups + 1); WRITE_ONCE(rtorsup->rtorsu_nmigrates, @@ -2519,7 +2516,7 @@ static void rcu_torture_updown_cleanup(void) if (!smp_load_acquire(&rtorsup->rtorsu_inuse)) continue; if (hrtimer_cancel(&rtorsup->rtorsu_hrt) || WARN_ON_ONCE(rtorsup->rtorsu= _inuse)) { - rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, = -1); + rcu_torture_one_read_end(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs); WARN_ONCE(rtorsup->rtorsu_nups >=3D rtorsup->rtorsu_ndowns, "%s: Up wit= hout matching down #%zu.\n", __func__, rtorsup - updownreaders); WRITE_ONCE(rtorsup->rtorsu_nups, rtorsup->rtorsu_nups + 1); smp_store_release(&rtorsup->rtorsu_inuse, false); --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC379292B5B; Wed, 9 Jul 2025 10:43:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057818; cv=none; b=YXXIr81t+Gvl6jhnEyuDd1oxeO3w51O0rDutd7H08Iptq5HG+b61y93GOa/MqG04qyrSSleHJP63pxwGfbdbtgWAlMkjNaFh4MqxmM9A4X2lHSHrU3n3Tq/2jq3UooZLkPYdlPJIx/+iYfhg8nAsxD4RI2q4Mvf8vNYiIdMC/Jo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057818; c=relaxed/simple; bh=ulnbOGonGD9IkLvyvRlXLea+xunQWmohmBwivmEFGMY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=h5BDKO3JHk4YrpKkX40T8AiW7QUnymDTnxtRoDAdqtcLxqdSrjPivUm3qV+UC1h83q1DcMGGfc/GeLSkbwl8NVz0772VMIyuU2PKDqMyFyr944xCzhaQa1kfbT4t32NYbCxQg60ory7QenP/VE37/V/jnhZEFnqr5EmW6WnbC/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l3lb/5Zw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="l3lb/5Zw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D2576C4CEEF; Wed, 9 Jul 2025 10:43:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057816; bh=ulnbOGonGD9IkLvyvRlXLea+xunQWmohmBwivmEFGMY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l3lb/5ZwadzoC4Lm/KVEHjZZlu73QLMU6XPjctOWV7fb8Y1UWrLOdc2/5TIwm7swY GkaMkeWrOQugkJ2/HAWBrJFXmem+Umcdg+WE1c3TxzlSgtJLdXT2eZKHOqWXqRgQn/ V0i4WaKfgp+J7FHe0rDI/OWjOP4eLRglo6JPrgQj2pB7qFQ83nd4wia/k9OPfG1Nh6 2vLL3e2DECruyds5OCDKOTdy+NOp332ssUtT+xoNY7zH44fAp/dMIRpPRHQUMIpquq PWZhU+vVY8El/C7h8/tB0AOJEfIm9skF8Q2APPMZKIyasPxCOPjtUv3QmVWbDAiWcQ fRIbqd4yp7kUw== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" , kernel test robot Subject: [PATCH rcu 11/15] rcutorture: Make Trivial RCU ignore onoff_interval and shuffle_interval Date: Wed, 9 Jul 2025 16:12:11 +0530 Message-Id: <20250709104215.15562-12-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" Trivial RCU is a textbook implementation that is not used in the Linux kernel, but tested to keep textbooks (and presentations) honest. It is so trivial that it cannot deal with either CPU hotplug or external migration from one CPU to another. This commit therefore splats whenever onoff_interval or shuffle_interval are non-zero, and then sets them to zero in order to avoid false-positive failures. Those wishing to set these module parameters in order to force failures in Trivial RCU are free to revert this commit. Just don't expect me to be sympathetic to any resulting bug reports! Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-lkp/202505131651.af6e81d7-lkp@intel.com Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 470b5a117602..7a07b2590c27 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -969,7 +969,8 @@ static struct rcu_torture_ops busted_srcud_ops =3D { =20 /* * Definitions for trivial CONFIG_PREEMPT=3Dn-only torture testing. - * This implementation does not necessarily work well with CPU hotplug. + * This implementation does not work well with CPU hotplug nor + * with rcutorture's shuffling. */ =20 static void synchronize_rcu_trivial(void) @@ -982,6 +983,16 @@ static void synchronize_rcu_trivial(void) } } =20 +static void rcu_sync_torture_init_trivial(void) +{ + rcu_sync_torture_init(); + // if (onoff_interval || shuffle_interval) { + if (WARN_ONCE(onoff_interval || shuffle_interval, "%s: Non-zero onoff_int= erval (%d) or shuffle_interval (%d) breaks trivial RCU, resetting to zero",= __func__, onoff_interval, shuffle_interval)) { + onoff_interval =3D 0; + shuffle_interval =3D 0; + } +} + static int rcu_torture_read_lock_trivial(void) { preempt_disable(); @@ -995,7 +1006,7 @@ static void rcu_torture_read_unlock_trivial(int idx) =20 static struct rcu_torture_ops trivial_ops =3D { .ttype =3D RCU_TRIVIAL_FLAVOR, - .init =3D rcu_sync_torture_init, + .init =3D rcu_sync_torture_init_trivial, .readlock =3D rcu_torture_read_lock_trivial, .read_delay =3D rcu_read_delay, /* just reuse rcu's version. */ .readunlock =3D rcu_torture_read_unlock_trivial, --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEA16292B5B; Wed, 9 Jul 2025 10:43:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057823; cv=none; b=P60gyfBeDI47sLpvtBTNiFfU4fm/IERU5aSSTgIIxmxbZJwyiw8ZyfTOhavpgb6lC3XWD0d+eJwYp/6sV1rWlNhGfu/aLkVK614kET4h0oumbZ3CFxj8xYUz9lqzPxxntC/uxcJ4HTSKg7RZvyUdBJXP5DOq3/UXYnl425CNoT0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057823; c=relaxed/simple; bh=rlpZsvOHlInyJAVqjUW/0651NDCFnnRESbttLKrNIQY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ODG0aLWCTeDA4AVTR5b0lBEieR3ruev1vIUKLRoQmR+ZiYz80k9NIbzp831GVqr43eIJaMs0XLPxvUfsP5zzKS+SZsYYr9KrpVZbGtN9qVLv2iA2u9Xz28UUsVSJ9K9fKryg3Z6sWwph10vwwDdXGcdkToavcWzfFYj9oHBpXKE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HQhgEej6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HQhgEej6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 97BB6C4CEF4; Wed, 9 Jul 2025 10:43:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057822; bh=rlpZsvOHlInyJAVqjUW/0651NDCFnnRESbttLKrNIQY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HQhgEej6pJj/OjIKG3QwFHi9giYGcplm+dsG8tPqFePRNHA8N+XRycPHipvlP7vNh G9JdKTBm2pAANWLY9gySFoSI5VVJmliYZ+FK282sv5PNTz3s9MtgSKP2Y5FH4lYskF K68sroxPmT4XbqKZlx0Z9LDOUXCpBJlQEQLCcLV2Q1CCUuzbDT87zf5CmoSDpgIhTv zLUlECTN7CU3c0UAE2tPgJ5s13r/lU/2NteJnGDUhodlhNtRk1rdDZZRdLEoSmTlkP dSuAa6FR5PalpUs4ZOFOs8GowV2Lg7RN/DS0jMeGu1MJseAcxhR7Pb7g6lhfvmaZDy IwP/Pr1H7D+IA== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 12/15] rcutorture: Fix rcutorture_one_extend_check() splat in RT kernels Date: Wed, 9 Jul 2025 16:12:12 +0530 Message-Id: <20250709104215.15562-13-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zqiang For built with CONFIG_PREEMPT_RT=3Dy kernels, running rcutorture tests resulted in the following splat: [ 68.797425] rcutorture_one_extend_check during change: Current 0x1 To a= dd 0x1 To remove 0x0 preempt_count() 0x0 [ 68.797533] WARNING: CPU: 2 PID: 512 at kernel/rcu/rcutorture.c:1993 rcu= torture_one_extend_check+0x419/0x560 [rcutorture] [ 68.797601] Call Trace: [ 68.797602] [ 68.797619] ? lockdep_softirqs_off+0xa5/0x160 [ 68.797631] rcutorture_one_extend+0x18e/0xcc0 [rcutorture 2466dbd2ff34d= baa36049cb323a80c3306ac997c] [ 68.797646] ? local_clock+0x19/0x40 [ 68.797659] rcu_torture_one_read+0xf0/0x280 [rcutorture 2466dbd2ff34dba= a36049cb323a80c3306ac997c] [ 68.797678] ? __pfx_rcu_torture_one_read+0x10/0x10 [rcutorture 2466dbd2= ff34dbaa36049cb323a80c3306ac997c] [ 68.797804] ? __pfx_rcu_torture_timer+0x10/0x10 [rcutorture 2466dbd2ff3= 4dbaa36049cb323a80c3306ac997c] [ 68.797815] rcu-torture: rcu_torture_reader task started [ 68.797824] rcu-torture: Creating rcu_torture_reader task [ 68.797824] rcu_torture_reader+0x238/0x580 [rcutorture 2466dbd2ff34dbaa= 36049cb323a80c3306ac997c] [ 68.797836] ? kvm_sched_clock_read+0x15/0x30 Disable BH does not change the SOFTIRQ corresponding bits in preempt_count() for RT kernels, this commit therefore use softirq_count() to check the if BH is disabled. Reviewed-by: Paul E. McKenney Signed-off-by: Zqiang Signed-off-by: Joel Fernandes Signed-off-by: Neeraj Upadhyay (AMD) --- kernel/rcu/rcutorture.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 7a07b2590c27..213f23f20a64 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -471,7 +471,7 @@ rcu_read_delay(struct torture_random_state *rrsp, struc= t rt_read_seg *rtrsp) !(torture_random(rrsp) % (nrealreaders * 2000 * longdelay_ms))) { started =3D cur_ops->get_gp_seq(); ts =3D rcu_trace_clock_local(); - if (preempt_count() & (SOFTIRQ_MASK | HARDIRQ_MASK)) + if ((preempt_count() & HARDIRQ_MASK) || softirq_count()) longdelay_ms =3D 5; /* Avoid triggering BH limits. */ mdelay(longdelay_ms); rtrsp->rt_delay_ms =3D longdelay_ms; @@ -2001,7 +2001,7 @@ static void rcutorture_one_extend_check(char *s, int = curstate, int new, int old) return; =20 WARN_ONCE((curstate & (RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH)) && - !(preempt_count() & SOFTIRQ_MASK), ROEC_ARGS); + !softirq_count(), ROEC_ARGS); WARN_ONCE((curstate & (RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED)) && !(preempt_count() & PREEMPT_MASK), ROEC_ARGS); WARN_ONCE(cur_ops->readlock_nesting && @@ -2015,7 +2015,7 @@ static void rcutorture_one_extend_check(char *s, int = curstate, int new, int old) =20 WARN_ONCE(cur_ops->extendables && !(curstate & (RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH)) && - (preempt_count() & SOFTIRQ_MASK), ROEC_ARGS); + softirq_count(), ROEC_ARGS); =20 /* * non-preemptible RCU in a preemptible kernel uses preempt_disable() @@ -2036,6 +2036,9 @@ static void rcutorture_one_extend_check(char *s, int = curstate, int new, int old) if (!IS_ENABLED(CONFIG_PREEMPT_RCU)) mask |=3D RCUTORTURE_RDR_PREEMPT | RCUTORTURE_RDR_SCHED; =20 + if (IS_ENABLED(CONFIG_PREEMPT_RT) && softirq_count()) + mask |=3D RCUTORTURE_RDR_BH | RCUTORTURE_RDR_RBH; + WARN_ONCE(cur_ops->readlock_nesting && !(curstate & mask) && cur_ops->readlock_nesting() > 0, ROEC_ARGS); } --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63016293B7D; Wed, 9 Jul 2025 10:43:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057828; cv=none; b=NV4aNHtgg32etiBR3agkmpFkj5WlIAlpUOKN4Zf3JEXOdFDh+yae5q6rSubXLlXCOAym7R5KmQf8Oi0PU9cdYxjHWeHuliD8e6vN2edeGHysgiSDSY25sBKpV8UnM2ZK6S+TFJuyC9VjZwaUjavXBvMSuzxzdZrMbXKG8cdbQns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057828; c=relaxed/simple; bh=AWKJtvgbxB4/51UABL1HB+dWVfB7Jp45KPK9z3a2k94=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=pEwXqQFusQHG2gTSz9DAUEVa4UX9oJka+/06bjAN5kQK2L8hY4SvmVJtr72LLmzKHbVARCXiRTyrUqb40I4LQKCtQSZ6qJIB+0gUOU1IH983ynfCjAyqs2BxyMJ7Bs2ymkS/Heip3PvuhUEbwb6cUQ9AJ9YuIBXbKpZpVYJr6I4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aZrvwtho; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aZrvwtho" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 15799C4CEF4; Wed, 9 Jul 2025 10:43:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057828; bh=AWKJtvgbxB4/51UABL1HB+dWVfB7Jp45KPK9z3a2k94=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aZrvwthoLY90ktVVD5CMwjT51mF5Y57TLgH+5lrf8UUnalhbqLxP+6JxkEdUmIbT4 dcYbdjcztwPkPRXfigEy/tQQ5iqNuGo0c4hD6Xa3VQb9WNhMVUxoezwxeERhcubCYD VT3htg5FZ07miHKbNQAQKmkmAGH5wLE4564mD3hfym9I7+kXsRbqMX9nl4e/TYuROS f96YkJeeRaQ4TSDx5tZ5x4hn/NokatZfRiAo+EUFG9cwPcCQqiDzEW+GqKHt1ZhnWb r5VkatXuwBJpyU/O89VKDLCuzCy2PcpI8kDCWNBlhrDqKMniOviTbm9RkCoiuM1+0h qBolOEbe1FDFQ== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 13/15] rcutorture: Make BUSTED scenario check and log readers Date: Wed, 9 Jul 2025 16:12:13 +0530 Message-Id: <20250709104215.15562-14-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" Because the BUSTED scenario intentionally executes too-short readers, this commit enables the RCU_TORTURE_TEST_CHK_RDR_STATE, RCU_TORTURE_TEST_LOG_CPU, and RCU_TORTURE_TEST_LOG_GP Kconfig options to test the resulting reader-segment dump. Signed-off-by: Paul E. McKenney Signed-off-by: Neeraj Upadhyay (AMD) --- tools/testing/selftests/rcutorture/configs/rcu/BUSTED | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/testing/selftests/rcutorture/configs/rcu/BUSTED b/tools/= testing/selftests/rcutorture/configs/rcu/BUSTED index 48d8a245c7fa..7d75f4b94943 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/BUSTED +++ b/tools/testing/selftests/rcutorture/configs/rcu/BUSTED @@ -5,3 +5,6 @@ CONFIG_HOTPLUG_CPU=3Dy CONFIG_PREEMPT_NONE=3Dn CONFIG_PREEMPT_VOLUNTARY=3Dn CONFIG_PREEMPT=3Dy +CONFIG_RCU_TORTURE_TEST_CHK_RDR_STATE=3Dy +CONFIG_RCU_TORTURE_TEST_LOG_CPU=3Dy +CONFIG_RCU_TORTURE_TEST_LOG_GP=3Dy --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 69E88293C67; Wed, 9 Jul 2025 10:43:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057833; cv=none; b=aPzSrtK9FrT8a84ziYRJwaFHPwL+LKNlr4e0fAPUFaUmkfe31JVOJxmRwHJFGOT/Z9MVeUzfx2ALUjwmTDVtTMd9CovAcSiXMxC+64SN1BsGoz1NP07LUROkbV3cj046ytCbAupWMdMFk2ARAqZngIKzotVlw+6RrCMUC6iWx9c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057833; c=relaxed/simple; bh=D+BR2jJNoFiZtF4yiFKLu/WnVHe1gWYYXH0zMlfkHXQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=C+x4+zz5XWBSd4qaDmYrYmypO8YlzGpWNTZ154r0Tai7BNU8KWnyuBxqa9mBYZrmBLILli4qJyVlkGCHi5nJiSCenMiVSpS24EE7kjGVezk1EtCK5UEEeYDMtLGr431LEAbc88741DQHQLuTXDecfDZA9P38CBOIAxM8eOgQcwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pX1qbgCz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pX1qbgCz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9AA37C4CEF7; Wed, 9 Jul 2025 10:43:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057833; bh=D+BR2jJNoFiZtF4yiFKLu/WnVHe1gWYYXH0zMlfkHXQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pX1qbgCzsMmankC3cWQue3qLzFw3zApDUyK5O2P3hzw4HH4VQJzPkpJgigNI94EMI KaB0/TU244jiB2niLytsJC92CNNWjvuRwcKn7UQ3luCXu6fsnrdQSzID6Hl+saZnGp 0mF/DqPaxZKGWP5NxM4vduw/+weX85BQxdlHqgGWUiZHZqHwgM00GECHS9L/+NBYCx uvT9DxlIfwH1WaT6if0eYOlbACkUaS+w3weWwzzlxGoOfSXnCGhr3m9NHbz2X/sRc4 7ieAf2xdhDPXvI0jWPbR7vT5BZeV6DXiv0nS9FF2a9VxOs54GmMyEzoe+6T/RRut5A SGcXp/B6Odr/A== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 14/15] rcutorture: Remove SRCU-lite scenarios Date: Wed, 9 Jul 2025 16:12:14 +0530 Message-Id: <20250709104215.15562-15-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" This commit prepares for the removal of SRCU-Lite by removing the SRCU-L rcutorture scenario that tests it. Signed-off-by: "Paul E. McKenney" Signed-off-by: Neeraj Upadhyay (AMD) --- tools/testing/selftests/rcutorture/configs/rcu/CFLIST | 1 - tools/testing/selftests/rcutorture/configs/rcu/SRCU-L | 10 ---------- .../selftests/rcutorture/configs/rcu/SRCU-L.boot | 3 --- 3 files changed, 14 deletions(-) delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-L delete mode 100644 tools/testing/selftests/rcutorture/configs/rcu/SRCU-L.b= oot diff --git a/tools/testing/selftests/rcutorture/configs/rcu/CFLIST b/tools/= testing/selftests/rcutorture/configs/rcu/CFLIST index 45f572570a8c..98b6175e5aa0 100644 --- a/tools/testing/selftests/rcutorture/configs/rcu/CFLIST +++ b/tools/testing/selftests/rcutorture/configs/rcu/CFLIST @@ -5,7 +5,6 @@ TREE04 TREE05 TREE07 TREE09 -SRCU-L SRCU-N SRCU-P SRCU-T diff --git a/tools/testing/selftests/rcutorture/configs/rcu/SRCU-L b/tools/= testing/selftests/rcutorture/configs/rcu/SRCU-L deleted file mode 100644 index 3b4fa8dbef8a..000000000000 --- a/tools/testing/selftests/rcutorture/configs/rcu/SRCU-L +++ /dev/null @@ -1,10 +0,0 @@ -CONFIG_RCU_TRACE=3Dn -CONFIG_SMP=3Dy -CONFIG_NR_CPUS=3D6 -CONFIG_HOTPLUG_CPU=3Dy -CONFIG_PREEMPT_NONE=3Dy -CONFIG_PREEMPT_VOLUNTARY=3Dn -CONFIG_PREEMPT=3Dn -#CHECK#CONFIG_RCU_EXPERT=3Dn -CONFIG_KPROBES=3Dn -CONFIG_FTRACE=3Dn diff --git a/tools/testing/selftests/rcutorture/configs/rcu/SRCU-L.boot b/t= ools/testing/selftests/rcutorture/configs/rcu/SRCU-L.boot deleted file mode 100644 index 0207b3138c5b..000000000000 --- a/tools/testing/selftests/rcutorture/configs/rcu/SRCU-L.boot +++ /dev/null @@ -1,3 +0,0 @@ -rcutorture.torture_type=3Dsrcu -rcutorture.reader_flavor=3D0x4 -rcutorture.fwd_progress=3D3 --=20 2.40.1 From nobody Tue Oct 7 13:23:06 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04E92293C77; Wed, 9 Jul 2025 10:43:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057839; cv=none; b=mDd/9u8vYxXNhwFrN27hoa8gewb7q5i7ifx5maZXAM8pL7wVgbz/YS0PbXlPfWe/P97z1rTDwsnEM4Cn9b9Xa9Gket95TTHHuM69Nimurvsoqs7ryeQY0WqvYGQeDWwK0rGx4ZAmdMVnesth2iWz14OxB81ai9CL7oEOgPuPtcw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752057839; c=relaxed/simple; bh=5P4dzPtGQTwTuHcsDkeuA8Wafn1PVojCmEfac+5vgxk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Umj3vBiV7+cBFQP3mqSDnoUFslzCRc6Rzg2l6d78bofOjDhdLUl6IpWFoGGVzuYrepT8WyqqO/GONCY0/+dkBYJwKy15gZx1xZwNO1FfIj7IEBURNBnFiZD2bjGm5vieUrNcRvBc18KD7vtWY0IQh3PuM3TM7y5lrNaqfvQGouI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OnLTN9Cg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OnLTN9Cg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E88F3C4CEF7; Wed, 9 Jul 2025 10:43:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752057838; bh=5P4dzPtGQTwTuHcsDkeuA8Wafn1PVojCmEfac+5vgxk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OnLTN9CgM4Sz6ADqscUjLSJIl04PVsg0kvHEc77kCRLVRb72H7UN60pnGSjvxUms/ pi9UV3CZrc/qXPawY/9DM0bW6N4J5mZwWJY3xTaGzuFGouNAxufHLeP+ExA8Rc5GFS 1XwpitottlwJyeqUQdU6SGJP4nNoNm0AUzqmnkc4ojFbxC5bH64OqaX9SZwqIUeymr PAJcZovWeBeQF4dMukqIu1QyjO54bODF6RLfvPxc9Ff2/GSyo/wUBUesJh7UXuKWi0 yPmcTehHhsWoeeUrK2SZF5UysbM+j8qd5wLpk8Z3nVZSyJwLpGJvcE1cKpGJbW/1QA 5sgDASx7XfjqQ== From: neeraj.upadhyay@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, paulmck@kernel.org, joelagnelf@nvidia.com, frederic@kernel.org, boqun.feng@gmail.com, urezki@gmail.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com, qiang.zhang1211@gmail.com, neeraj.iitr10@gmail.com, neeraj.upadhyay@amd.com, "Neeraj Upadhyay (AMD)" Subject: [PATCH rcu 15/15] rcutorture: Remove support for SRCU-lite Date: Wed, 9 Jul 2025 16:12:15 +0530 Message-Id: <20250709104215.15562-16-neeraj.upadhyay@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> References: <20250709104215.15562-1-neeraj.upadhyay@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: "Paul E. McKenney" Because SRCU-lite is being replaced by SRCU-fast, this commit removes support for SRCU-lite from rcutorture.c Signed-off-by: "Paul E. McKenney" Signed-off-by: Neeraj Upadhyay (AMD) --- include/linux/srcu.h | 2 +- kernel/rcu/rcutorture.c | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/include/linux/srcu.h b/include/linux/srcu.h index 900b0d5c05f5..c20dacb563e5 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h @@ -49,7 +49,7 @@ int init_srcu_struct(struct srcu_struct *ssp); #define SRCU_READ_FLAVOR_LITE 0x4 // srcu_read_lock_lite(). #define SRCU_READ_FLAVOR_FAST 0x8 // srcu_read_lock_fast(). #define SRCU_READ_FLAVOR_ALL (SRCU_READ_FLAVOR_NORMAL | SRCU_READ_FLAVOR= _NMI | \ - SRCU_READ_FLAVOR_LITE | SRCU_READ_FLAVOR_FAST) // All of the above. + SRCU_READ_FLAVOR_FAST) // All of the above. #define SRCU_READ_FLAVOR_SLOWGP (SRCU_READ_FLAVOR_LITE | SRCU_READ_FLAVOR_= FAST) // Flavors requiring synchronize_rcu() // instead of smp_mb(). diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 213f23f20a64..7a893d51d02b 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -718,11 +718,6 @@ static int srcu_torture_read_lock(void) WARN_ON_ONCE(idx & ~0x1); ret +=3D idx << 1; } - if (reader_flavor & SRCU_READ_FLAVOR_LITE) { - idx =3D srcu_read_lock_lite(srcu_ctlp); - WARN_ON_ONCE(idx & ~0x1); - ret +=3D idx << 2; - } if (reader_flavor & SRCU_READ_FLAVOR_FAST) { scp =3D srcu_read_lock_fast(srcu_ctlp); idx =3D __srcu_ptr_to_ctr(srcu_ctlp, scp); @@ -756,8 +751,6 @@ static void srcu_torture_read_unlock(int idx) WARN_ON_ONCE((reader_flavor && (idx & ~reader_flavor)) || (!reader_flavor= && (idx & ~0x1))); if (reader_flavor & SRCU_READ_FLAVOR_FAST) srcu_read_unlock_fast(srcu_ctlp, __srcu_ctr_to_ptr(srcu_ctlp, (idx & 0x8= ) >> 3)); - if (reader_flavor & SRCU_READ_FLAVOR_LITE) - srcu_read_unlock_lite(srcu_ctlp, (idx & 0x4) >> 2); if (reader_flavor & SRCU_READ_FLAVOR_NMI) srcu_read_unlock_nmisafe(srcu_ctlp, (idx & 0x2) >> 1); if ((reader_flavor & SRCU_READ_FLAVOR_NORMAL) || !(reader_flavor & SRCU_R= EAD_FLAVOR_ALL)) --=20 2.40.1