mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 22:27:23 +07:00
rcu: Add READ_ONCE and data_race() to rcu_node ->boost_tasks
The rcu_node structure's ->boost_tasks field is read locklessly, so this commit adds the READ_ONCE() to one load in order to avoid destructive compiler optimizations. The other load is from a diagnostic print, so data_race() suffices. 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:
parent
314eeb43e5
commit
065a6db12a
@ -760,7 +760,7 @@ dump_blkd_tasks(struct rcu_node *rnp, int ncheck)
|
|||||||
pr_info("%s: %d:%d ->qsmask %#lx ->qsmaskinit %#lx ->qsmaskinitnext %#lx\n",
|
pr_info("%s: %d:%d ->qsmask %#lx ->qsmaskinit %#lx ->qsmaskinitnext %#lx\n",
|
||||||
__func__, rnp1->grplo, rnp1->grphi, rnp1->qsmask, rnp1->qsmaskinit, rnp1->qsmaskinitnext);
|
__func__, rnp1->grplo, rnp1->grphi, rnp1->qsmask, rnp1->qsmaskinit, rnp1->qsmaskinitnext);
|
||||||
pr_info("%s: ->gp_tasks %p ->boost_tasks %p ->exp_tasks %p\n",
|
pr_info("%s: ->gp_tasks %p ->boost_tasks %p ->exp_tasks %p\n",
|
||||||
__func__, READ_ONCE(rnp->gp_tasks), rnp->boost_tasks,
|
__func__, READ_ONCE(rnp->gp_tasks), data_race(rnp->boost_tasks),
|
||||||
READ_ONCE(rnp->exp_tasks));
|
READ_ONCE(rnp->exp_tasks));
|
||||||
pr_info("%s: ->blkd_tasks", __func__);
|
pr_info("%s: ->blkd_tasks", __func__);
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -1036,7 +1036,8 @@ static int rcu_boost_kthread(void *arg)
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
WRITE_ONCE(rnp->boost_kthread_status, RCU_KTHREAD_WAITING);
|
WRITE_ONCE(rnp->boost_kthread_status, RCU_KTHREAD_WAITING);
|
||||||
trace_rcu_utilization(TPS("End boost kthread@rcu_wait"));
|
trace_rcu_utilization(TPS("End boost kthread@rcu_wait"));
|
||||||
rcu_wait(rnp->boost_tasks || READ_ONCE(rnp->exp_tasks));
|
rcu_wait(READ_ONCE(rnp->boost_tasks) ||
|
||||||
|
READ_ONCE(rnp->exp_tasks));
|
||||||
trace_rcu_utilization(TPS("Start boost kthread@rcu_wait"));
|
trace_rcu_utilization(TPS("Start boost kthread@rcu_wait"));
|
||||||
WRITE_ONCE(rnp->boost_kthread_status, RCU_KTHREAD_RUNNING);
|
WRITE_ONCE(rnp->boost_kthread_status, RCU_KTHREAD_RUNNING);
|
||||||
more2boost = rcu_boost(rnp);
|
more2boost = rcu_boost(rnp);
|
||||||
|
Loading…
Reference in New Issue
Block a user