rcu: Fix exp_funnel_lock()/rcu_exp_wait_wake() datarace
The rcu_node structure's ->exp_seq_rq field is accessed locklessly, so updates must use WRITE_ONCE(). This commit therefore adds the needed WRITE_ONCE() invocation where it was missed. This data race was reported by KCSAN. Not appropriate for backporting due to failure being unlikely. Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
Родитель
82dd8419e2
Коммит
24bb9eccf7
|
@ -589,7 +589,7 @@ static void rcu_exp_wait_wake(unsigned long s)
|
|||
spin_lock(&rnp->exp_lock);
|
||||
/* Recheck, avoid hang in case someone just arrived. */
|
||||
if (ULONG_CMP_LT(rnp->exp_seq_rq, s))
|
||||
rnp->exp_seq_rq = s;
|
||||
WRITE_ONCE(rnp->exp_seq_rq, s);
|
||||
spin_unlock(&rnp->exp_lock);
|
||||
}
|
||||
smp_mb(); /* All above changes before wakeup. */
|
||||
|
|
Загрузка…
Ссылка в новой задаче