[PATCH RFC 3/4] hazptrtorture: Add microsecond-scale sleep in readers
From: Paul E. McKenney
Date: Thu May 07 2026 - 12:53:53 EST
This commit adds a default-disabled reader_sleep_us module parameter
that causes the hazard-pointer reader to unconditionally sleep for the
specified number of microseconds.
Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
---
kernel/rcu/hazptrtorture.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/kernel/rcu/hazptrtorture.c b/kernel/rcu/hazptrtorture.c
index 1a61d35ade1d9d..219fd90a7f8840 100644
--- a/kernel/rcu/hazptrtorture.c
+++ b/kernel/rcu/hazptrtorture.c
@@ -39,6 +39,7 @@ torture_param(int, onoff_interval, 0, "Time between CPU hotplugs (jiffies), 0=di
// @@@ Move the rcu_torture_preempt() function and friends to kernel/torture.c.
torture_param(int, preempt_duration, 0, "Preemption duration (ms), zero to disable");
torture_param(int, preempt_interval, MSEC_PER_SEC, "Interval between preemptions (ms)");
+torture_param(int, reader_sleep_us, 0, "Reader sleep duration (us)");
torture_param(int, shuffle_interval, 3, "Number of seconds between shuffles");
torture_param(int, shutdown_secs, 0, "Shutdown time (s), <= zero to disable.");
torture_param(int, stat_interval, 60, "Number of seconds between stats printk()s");
@@ -227,6 +228,8 @@ static void hazptr_read_delay(struct torture_random_state *rrsp)
udelay(shortdelay_us);
if (!preempt_count() && !(torture_random(rrsp) % (nrealreaders * 500)))
torture_preempt_schedule(); /* QS only if preemptible. */
+ if (reader_sleep_us > 0)
+ torture_hrtimeout_us(reader_sleep_us, 0, NULL);
}
static void hazptr_torture_read_unlock(struct hazptr_ctx *hcp, struct hazptr_torture *htp)
@@ -516,11 +519,13 @@ hazptr_torture_print_module_parms(struct hazptr_torture_ops *cur_ops, const char
"--- %s: nreaders=%d "
"onoff_interval=%d onoff_holdoff=%d "
"preempt_duration=%d preempt_interval=%d "
+ "reader_sleep_us=%d "
"shuffle_interval=%d shutdown_secs=%d stat_interval=%d stutter=%d "
"verbose=%d\n",
torture_type, tag, nrealreaders,
onoff_interval, onoff_holdoff,
preempt_duration, preempt_interval,
+ reader_sleep_us,
shuffle_interval, shutdown_secs, stat_interval, stutter,
verbose);
}
--
2.40.1