rcu: Mark lockless ->qsmask read in rcu_check_boost_fail()
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 3 Jun 2021 17:17:36 +0000 (10:17 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Fri, 6 Aug 2021 20:41:48 +0000 (13:41 -0700)
Accesses to ->qsmask are normally protected by ->lock, but there is an
exception in the diagnostic code in rcu_check_boost_fail().  This commit
therefore applies data_race() to this access to avoid KCSAN complaining
about the C-language writes protected by ->lock.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/tree_stall.h

index 42847ca..6dd6c9a 100644 (file)
@@ -766,7 +766,7 @@ bool rcu_check_boost_fail(unsigned long gp_state, int *cpup)
 
        rcu_for_each_leaf_node(rnp) {
                if (!cpup) {
-                       if (READ_ONCE(rnp->qsmask)) {
+                       if (data_race(READ_ONCE(rnp->qsmask))) {
                                return false;
                        } else {
                                if (READ_ONCE(rnp->gp_tasks))