Commit 48297a22 authored by Zqiang's avatar Zqiang Committed by Paul E. McKenney

rcutorture: Use the barrier operation specified by cur_ops

The rcutorture_oom_notify() function unconditionally invokes
rcu_barrier(), which is OK when the rcutorture.torture_type value is
"rcu", but unhelpful otherwise.  The purpose of these barrier calls is to
wait for all outstanding callback-flooding callbacks to be invoked before
cleaning up their data.  Using the wrong barrier function therefore
risks arbitrary memory corruption.  Thus, this commit changes these
rcu_barrier() calls into cur_ops->cb_barrier() to make things work when
torturing non-vanilla flavors of RCU.
Signed-off-by: default avatarZqiang <qiang1.zhang@intel.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 7634b1ea
...@@ -2600,12 +2600,12 @@ static int rcutorture_oom_notify(struct notifier_block *self, ...@@ -2600,12 +2600,12 @@ static int rcutorture_oom_notify(struct notifier_block *self,
for (i = 0; i < fwd_progress; i++) for (i = 0; i < fwd_progress; i++)
ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]); ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs); pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
rcu_barrier(); cur_ops->cb_barrier();
ncbs = 0; ncbs = 0;
for (i = 0; i < fwd_progress; i++) for (i = 0; i < fwd_progress; i++)
ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]); ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs); pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
rcu_barrier(); cur_ops->cb_barrier();
ncbs = 0; ncbs = 0;
for (i = 0; i < fwd_progress; i++) for (i = 0; i < fwd_progress; i++)
ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]); ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment