rcu: Add READ_ONCE() to rcu_do_batch() access to rcu_kick_kthreads
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 24 Jun 2020 01:04:45 +0000 (18:04 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 25 Aug 2020 01:36:07 +0000 (18:36 -0700)
Given that sysfs can change the value of rcu_kick_kthreads at any time,
this commit adds a READ_ONCE() to the sole access to that variable.

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

index b5d3b4794db48f23cc037965e0545fc175a15d4d..a1780a621b5e95d0cdf6df11b92fcfa8aafb8875 100644 (file)
@@ -158,7 +158,7 @@ static void rcu_stall_kick_kthreads(void)
 {
        unsigned long j;
 
-       if (!rcu_kick_kthreads)
+       if (!READ_ONCE(rcu_kick_kthreads))
                return;
        j = READ_ONCE(rcu_state.jiffies_kick_kthreads);
        if (time_after(jiffies, j) && rcu_state.gp_kthread &&
@@ -580,7 +580,7 @@ static void check_cpu_stall(struct rcu_data *rdp)
        unsigned long js;
        struct rcu_node *rnp;
 
-       if ((rcu_stall_is_suppressed() && !rcu_kick_kthreads) ||
+       if ((rcu_stall_is_suppressed() && !READ_ONCE(rcu_kick_kthreads)) ||
            !rcu_gp_in_progress())
                return;
        rcu_stall_kick_kthreads();