From: "Paul E. McKenney" <paulmck@kernel.org>
To: rcu@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com,
rostedt@goodmis.org, "Paul E. McKenney" <paulmck@kernel.org>
Subject: [PATCH 6/9] rcutorture: Pull rcu_torture_updown() loop body into new function
Date: Mon, 10 Mar 2025 11:38:06 -0700 [thread overview]
Message-ID: <20250310183809.3576320-6-paulmck@kernel.org> (raw)
In-Reply-To: <4bf081c8-9299-4ee3-b337-d5b751cef6be@paulmck-laptop>
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 <paulmck@kernel.org>
---
kernel/rcu/rcutorture.c | 46 ++++++++++++++++++++++-------------------
1 file changed, 25 insertions(+), 21 deletions(-)
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 6afcd33e724ba..6d808c70349c4 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -2505,6 +2505,30 @@ static void rcu_torture_updown_cleanup(void)
updownreaders = NULL;
}
+// Do one reader for rcu_torture_updown().
+static void rcu_torture_updown_one(struct rcu_torture_one_read_state_updown *rtorsup)
+{
+ int idx;
+ int rawidx;
+ ktime_t t;
+
+ init_rcu_torture_one_read_state(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs);
+ rawidx = cur_ops->down_read();
+ idx = (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1;
+ rtorsup->rtorsu_rtors.readstate = idx | RCUTORTURE_RDR_UPDOWN;
+ rtorsup->rtorsu_rtors.rtrsp++;
+ if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors, &rtorsup->rtorsu_trs, -1)) {
+ cur_ops->up_read(rawidx);
+ schedule_timeout_idle(HZ);
+ return;
+ }
+ smp_store_release(&rtorsup->rtorsu_inuse, true);
+ t = torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million.
+ if (t < 10 * 1000)
+ t = 200 * 1000 * 1000;
+ hrtimer_start(&rtorsup->rtorsu_hrt, t, HRTIMER_MODE_REL | HRTIMER_MODE_SOFT);
+}
+
/*
* RCU torture up/down reader kthread, starting RCU readers in kthread
* context and ending them in hrtimer handlers. Otherwise similar to
@@ -2513,10 +2537,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;
VERBOSE_TOROUT_STRING("rcu_torture_updown task started");
do {
@@ -2525,24 +2546,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 = cur_ops->down_read();
- idx = (rawidx << RCUTORTURE_RDR_SHIFT_1) & RCUTORTURE_RDR_MASK_1;
- rtorsup->rtorsu_rtors.readstate = idx | RCUTORTURE_RDR_UPDOWN;
- rtorsup->rtorsu_rtors.rtrsp++;
- if (!rcu_torture_one_read_start(&rtorsup->rtorsu_rtors,
- &rtorsup->rtorsu_trs, -1)) {
- cur_ops->up_read(rawidx);
- schedule_timeout_idle(HZ);
- continue;
- }
- smp_store_release(&rtorsup->rtorsu_inuse, true);
- t = torture_random(&rtorsup->rtorsu_trs) & 0xfffff; // One per million.
- if (t < 10 * 1000)
- t = 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");
--
2.40.1
next prev parent reply other threads:[~2025-03-10 18:38 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-10 18:38 [PATCH 0/9] RCU torture-test changes for v6.16 Paul E. McKenney
2025-03-10 18:38 ` [PATCH 1/9] rcutorture: Make srcu_lockdep.sh check kernel Kconfig Paul E. McKenney
2025-03-10 18:38 ` [PATCH 2/9] rcutorture: Make srcu_lockdep.sh check reader-conflict handling Paul E. McKenney
2025-03-10 18:38 ` [PATCH 3/9] rcutorture: Split out beginning and end from rcu_torture_one_read() Paul E. McKenney
2025-03-10 18:38 ` [PATCH 4/9] rcutorture: Make torture.sh --do-rt use CONFIG_PREEMPT_RT Paul E. McKenney
2025-03-10 18:38 ` [PATCH 5/9] rcutorture: Add tests for SRCU up/down reader primitives Paul E. McKenney
2025-03-27 3:26 ` Z qiang
2025-03-27 14:30 ` Paul E. McKenney
2025-03-27 16:22 ` Joel Fernandes
2025-03-27 16:48 ` Paul E. McKenney
2025-03-27 17:08 ` Joel Fernandes
2025-03-27 17:18 ` Paul E. McKenney
2025-03-10 18:38 ` Paul E. McKenney [this message]
2025-03-10 18:38 ` [PATCH 7/9] rcutorture: Comment invocations of tick_dep_set_task() Paul E. McKenney
2025-03-10 18:38 ` [PATCH 8/9] rcutorture: Complain if an ->up_read() is delayed more than 10 seconds Paul E. McKenney
2025-03-10 18:38 ` [PATCH 9/9] rcutorture: Check for ->up_read() without matching ->down_read() Paul E. McKenney
2025-03-11 2:24 ` [PATCH 0/9] RCU torture-test changes for v6.16 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=20250310183809.3576320-6-paulmck@kernel.org \
--to=paulmck@kernel.org \
--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
all inboxes | Powered by JetHome®