summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@kernel.org>2024-08-01 17:43:03 -0700
committerNeeraj Upadhyay <neeraj.upadhyay@kernel.org>2024-08-15 00:12:24 +0530
commit11377947b5861fa59bf77c827e1dd7c081842cc9 (patch)
tree6c0b73a4081f9d0c2931a909c4ca74186b678b97
parent674fc922f06f7632ac94536ca92dd8addb606f46 (diff)
downloadlinux-11377947b5861fa59bf77c827e1dd7c081842cc9.tar.gz
linux-11377947b5861fa59bf77c827e1dd7c081842cc9.tar.bz2
linux-11377947b5861fa59bf77c827e1dd7c081842cc9.zip
rcuscale: Provide clear error when async specified without primitives
Currently, if the rcuscale module's async module parameter is specified for RCU implementations that do not have async primitives such as RCU Tasks Rude (which now lacks a call_rcu_tasks_rude() function), there will be a series of splats due to calls to a NULL pointer. This commit therefore warns of this situation, but switches to non-async testing. Signed-off-by: "Paul E. McKenney" <paulmck@kernel.org> Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
-rw-r--r--kernel/rcu/rcuscale.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c
index c507750e94d8..79e1c32d5c0f 100644
--- a/kernel/rcu/rcuscale.c
+++ b/kernel/rcu/rcuscale.c
@@ -525,7 +525,7 @@ rcu_scale_writer(void *arg)
schedule_timeout_idle(torture_random(&tr) % writer_holdoff_jiffies + 1);
wdp = &wdpp[i];
*wdp = ktime_get_mono_fast_ns();
- if (gp_async) {
+ if (gp_async && !WARN_ON_ONCE(!cur_ops->async)) {
retry:
if (!rhp)
rhp = kmalloc(sizeof(*rhp), GFP_KERNEL);
@@ -597,7 +597,7 @@ retry:
i++;
rcu_scale_wait_shutdown();
} while (!torture_must_stop());
- if (gp_async) {
+ if (gp_async && cur_ops->async) {
cur_ops->gp_barrier();
}
writer_n_durations[me] = i_max + 1;