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: Zqiang <qiang1.zhang@intel.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
Родитель
7634b1eaa0
Коммит
48297a22a3
|
@ -2600,12 +2600,12 @@ static int rcutorture_oom_notify(struct notifier_block *self,
|
|||
for (i = 0; i < fwd_progress; i++)
|
||||
ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
|
||||
pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
|
||||
rcu_barrier();
|
||||
cur_ops->cb_barrier();
|
||||
ncbs = 0;
|
||||
for (i = 0; i < fwd_progress; i++)
|
||||
ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
|
||||
pr_info("%s: Freed %lu RCU callbacks.\n", __func__, ncbs);
|
||||
rcu_barrier();
|
||||
cur_ops->cb_barrier();
|
||||
ncbs = 0;
|
||||
for (i = 0; i < fwd_progress; i++)
|
||||
ncbs += rcu_torture_fwd_prog_cbfree(&rfp[i]);
|
||||
|
|
Загрузка…
Ссылка в новой задаче