Message ID | 20240802004308.4134731-6-paulmck@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 3b2074aa67c8658287f0c5a274f50167e2b8c18d |
Headers | show |
Series | RCU update-side scalability update test | expand |
On Thu, Aug 01, 2024 at 05:43:03PM -0700, Paul E. McKenney wrote: > Currently, if the rcuscale module's async module parameter is specified > for RCU implementations that do not have sync primitives such as > call_rcu(), 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. > I have changed this to below here [1]. Please let me know if I got it wrong. 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, 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. [1] https://git.kernel.org/pub/scm/linux/kernel/git/neeraj.upadhyay/linux-rcu.git/commit/?h=next.14.08.24b&id=22d36840adbcab8fd826a7ca827fd60b708f03de - Neeraj > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > --- > kernel/rcu/rcuscale.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c > index 933014b381ec0..315ced63ec105 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 @@ rcu_scale_writer(void *arg) > 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; > -- > 2.40.1 >
On Wed, Aug 14, 2024 at 06:19:15PM +0530, Neeraj Upadhyay wrote: > On Thu, Aug 01, 2024 at 05:43:03PM -0700, Paul E. McKenney wrote: > > Currently, if the rcuscale module's async module parameter is specified > > for RCU implementations that do not have sync primitives such as > > call_rcu(), 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. > > > > I have changed this to below here [1]. Please let me know if I got it > wrong. > > 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, 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. How about something like this, but perhaps wordsmithed a bit? "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." Thanx, Paul > [1] https://git.kernel.org/pub/scm/linux/kernel/git/neeraj.upadhyay/linux-rcu.git/commit/?h=next.14.08.24b&id=22d36840adbcab8fd826a7ca827fd60b708f03de > > - Neeraj > > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > > --- > > kernel/rcu/rcuscale.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c > > index 933014b381ec0..315ced63ec105 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 @@ rcu_scale_writer(void *arg) > > 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; > > -- > > 2.40.1 > >
diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c index 933014b381ec0..315ced63ec105 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 @@ rcu_scale_writer(void *arg) 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;
Currently, if the rcuscale module's async module parameter is specified for RCU implementations that do not have sync primitives such as call_rcu(), 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> --- kernel/rcu/rcuscale.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)