public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@kernel.org>
To: rcu@vger.kernel.org, Joel Fernandes <joelagnelf@nvidia.com>
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com,
	rostedt@goodmis.org, "Paul E. McKenney" <paulmck@kernel.org>
Subject: [PATCH v2 08/12] rcutorture: Complain if an ->up_read() is delayed more than 10 seconds
Date: Mon, 31 Mar 2025 14:03:10 -0700	[thread overview]
Message-ID: <20250331210314.590622-8-paulmck@kernel.org> (raw)
In-Reply-To: <eea8d42f-6d2d-485b-9bb9-4eb77a0e1f95@paulmck-laptop>

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.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
 kernel/rcu/rcutorture.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index ea40f3ad32dc2..d2728e95a69b1 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -2438,6 +2438,7 @@ rcu_torture_reader(void *arg)
 struct rcu_torture_one_read_state_updown {
 	struct hrtimer rtorsu_hrt;
 	bool rtorsu_inuse;
+	unsigned long rtorsu_j;
 	struct torture_random_state rtorsu_trs;
 	struct rcu_torture_one_read_state rtorsu_rtors;
 };
@@ -2522,6 +2523,7 @@ static void rcu_torture_updown_one(struct rcu_torture_one_read_state_updown *rto
 		schedule_timeout_idle(HZ);
 		return;
 	}
+	rtorsup->rtorsu_j = jiffies;
 	smp_store_release(&rtorsup->rtorsu_inuse, true);
 	t = torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million.
 	if (t < 10 * 1000)
@@ -2544,8 +2546,10 @@ rcu_torture_updown(void *arg)
 		for (rtorsup = updownreaders; rtorsup < &updownreaders[n_up_down]; rtorsup++) {
 			if (torture_must_stop())
 				break;
-			if (smp_load_acquire(&rtorsup->rtorsu_inuse))
+			if (smp_load_acquire(&rtorsup->rtorsu_inuse)) {
+				WARN_ON_ONCE(time_after(jiffies, rtorsup->rtorsu_j + 10 * HZ));
 				continue;
+			}
 			rcu_torture_updown_one(rtorsup);
 		}
 		torture_hrtimeout_ms(1, 1000, &rcu_torture_updown_rand);
-- 
2.40.1


  parent reply	other threads:[~2025-03-31 21:03 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-31 21:02 [PATCH v2 0/12] Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 01/12] rcutorture: Make srcu_lockdep.sh check kernel Kconfig Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 02/12] rcutorture: Make srcu_lockdep.sh check reader-conflict handling Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 03/12] rcutorture: Split out beginning and end from rcu_torture_one_read() Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 04/12] rcutorture: Make torture.sh --do-rt use CONFIG_PREEMPT_RT Paul E. McKenney
2025-04-02  7:42   ` Sebastian Andrzej Siewior
2025-04-02 18:51     ` Paul E. McKenney
2025-04-07 19:12   ` [PATCH v3 4/12] " Paul E. McKenney
2025-04-08 14:29     ` [v3,4/12] " Joel Fernandes
2025-04-08 16:20       ` Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 05/12] rcutorture: Add tests for SRCU up/down reader primitives Paul E. McKenney
2025-04-08 20:18   ` [v2,05/12] " Joel Fernandes
2025-04-08 20:58     ` Paul E. McKenney
2025-04-08 22:05       ` Joel Fernandes
2025-04-08 22:21         ` Paul E. McKenney
2025-04-15 17:16   ` [PATCH v2 05/12] " Joel Fernandes
2025-04-15 17:59     ` Paul E. McKenney
2025-04-15 21:15       ` Paul E. McKenney
2025-04-16  1:14         ` Joel Fernandes
2025-04-16  3:55           ` Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 06/12] rcutorture: Pull rcu_torture_updown() loop body into new function Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 07/12] rcutorture: Comment invocations of tick_dep_set_task() Paul E. McKenney
2025-03-31 21:03 ` Paul E. McKenney [this message]
2025-03-31 21:03 ` [PATCH v2 09/12] rcutorture: Check for ->up_read() without matching ->down_read() Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 10/12] checkpatch: Deprecate srcu_read_lock_lite() and srcu_read_unlock_lite() Paul E. McKenney
2025-04-01  6:53   ` Joe Perches
2025-04-01 14:05     ` Paul E. McKenney
2025-04-02  3:48       ` Joe Perches
2025-04-02  4:23         ` Paul E. McKenney
2025-04-02  4:49           ` Joe Perches
2025-04-02 14:12             ` Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 11/12] torture: Add --do-{,no-}normal to torture.sh Paul E. McKenney
2025-03-31 21:03 ` [PATCH v2 12/12] torture: Add testing of RCU's Rust bindings " Paul E. McKenney
2025-04-02 14:45 ` [PATCH v2 0/12] Joel Fernandes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250331210314.590622-8-paulmck@kernel.org \
    --to=paulmck@kernel.org \
    --cc=joelagnelf@nvidia.com \
    --cc=kernel-team@meta.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox