[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250418161005.2425391-7-joelagnelf@nvidia.com>
Date: Fri, 18 Apr 2025 12:09:38 -0400
From: Joel Fernandes <joelagnelf@...dia.com>
To: linux-kernel@...r.kernel.org,
Davidlohr Bueso <dave@...olabs.net>,
"Paul E. McKenney" <paulmck@...nel.org>,
Josh Triplett <josh@...htriplett.org>,
Frederic Weisbecker <frederic@...nel.org>,
Neeraj Upadhyay <neeraj.upadhyay@...nel.org>,
Joel Fernandes <joel@...lfernandes.org>,
Boqun Feng <boqun.feng@...il.com>,
Uladzislau Rezki <urezki@...il.com>,
Steven Rostedt <rostedt@...dmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Lai Jiangshan <jiangshanlai@...il.com>,
Zqiang <qiang.zhang1211@...il.com>
Cc: rcu@...r.kernel.org,
Joel Fernandes <joelagnelf@...dia.com>
Subject: [PATCH 06/14] rcutorture: Pull rcu_torture_updown() loop body into new function
From: "Paul E. McKenney" <paulmck@...nel.org>
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@...nel.org>
Signed-off-by: Joel Fernandes <joelagnelf@...dia.com>
---
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 be671e09c1ce..daa55ff05570 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -2504,6 +2504,29 @@ 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)) {
+ 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
@@ -2512,10 +2535,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 {
@@ -2524,23 +2544,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)) {
- 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.43.0
Powered by blists - more mailing lists