mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 00:38:55 +00:00
rcutorture: Add RCU-tasks qualifier to dereference
Although RCU-tasks isn't really designed to support rcu_dereference() and list manipulation, that is how rcutorture tests it. Which means that lockdep-RCU complains about the rcu_dereference_check() invocations because RCU-tasks doesn't have read-side markers. This commit therefore creates a torturing_tasks() to silence the lockdep-RCU complaints from rcu_dereference_check() when RCU-tasks is being tortured. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
3a0af33341
commit
5be5d1a117
@ -684,10 +684,20 @@ static struct rcu_torture_ops tasks_ops = {
|
|||||||
|
|
||||||
#define RCUTORTURE_TASKS_OPS &tasks_ops,
|
#define RCUTORTURE_TASKS_OPS &tasks_ops,
|
||||||
|
|
||||||
|
static bool __maybe_unused torturing_tasks(void)
|
||||||
|
{
|
||||||
|
return cur_ops == &tasks_ops;
|
||||||
|
}
|
||||||
|
|
||||||
#else /* #ifdef CONFIG_TASKS_RCU */
|
#else /* #ifdef CONFIG_TASKS_RCU */
|
||||||
|
|
||||||
#define RCUTORTURE_TASKS_OPS
|
#define RCUTORTURE_TASKS_OPS
|
||||||
|
|
||||||
|
static bool torturing_tasks(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* #else #ifdef CONFIG_TASKS_RCU */
|
#endif /* #else #ifdef CONFIG_TASKS_RCU */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1087,7 +1097,8 @@ static void rcu_torture_timer(unsigned long unused)
|
|||||||
p = rcu_dereference_check(rcu_torture_current,
|
p = rcu_dereference_check(rcu_torture_current,
|
||||||
rcu_read_lock_bh_held() ||
|
rcu_read_lock_bh_held() ||
|
||||||
rcu_read_lock_sched_held() ||
|
rcu_read_lock_sched_held() ||
|
||||||
srcu_read_lock_held(srcu_ctlp));
|
srcu_read_lock_held(srcu_ctlp) ||
|
||||||
|
torturing_tasks());
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
/* Leave because rcu_torture_writer is not yet underway */
|
/* Leave because rcu_torture_writer is not yet underway */
|
||||||
cur_ops->readunlock(idx);
|
cur_ops->readunlock(idx);
|
||||||
@ -1161,7 +1172,8 @@ rcu_torture_reader(void *arg)
|
|||||||
p = rcu_dereference_check(rcu_torture_current,
|
p = rcu_dereference_check(rcu_torture_current,
|
||||||
rcu_read_lock_bh_held() ||
|
rcu_read_lock_bh_held() ||
|
||||||
rcu_read_lock_sched_held() ||
|
rcu_read_lock_sched_held() ||
|
||||||
srcu_read_lock_held(srcu_ctlp));
|
srcu_read_lock_held(srcu_ctlp) ||
|
||||||
|
torturing_tasks());
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
/* Wait for rcu_torture_writer to get underway */
|
/* Wait for rcu_torture_writer to get underway */
|
||||||
cur_ops->readunlock(idx);
|
cur_ops->readunlock(idx);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user