aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@kernel.org>2024-05-15 10:01:34 -0700
committerPaul E. McKenney <paulmck@kernel.org>2024-05-15 10:01:34 -0700
commit1484f939b01c265a23de707c7bc982a404c3c52f (patch)
tree5f3e81043f8bfcd738a500115faffdf24c2936da
parent0ef7d8bce484449f7880419915651a80b360df9b (diff)
downloadlinux-rcu-dev.tar.gz
EXP rcu-tasks: Synchronize RCU Tasks Trace GP with write to rq->currdev
More here TBD! Reported-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
-rw-r--r--kernel/rcu/tasks.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
index 8c9538b555e372..8adbd886ad2ee6 100644
--- a/kernel/rcu/tasks.h
+++ b/kernel/rcu/tasks.h
@@ -1723,6 +1723,11 @@ static void rcu_tasks_trace_pregp_step(struct list_head *hop)
for_each_possible_cpu(cpu)
WARN_ON_ONCE(per_cpu(trc_ipi_to_cpu, cpu));
+ // Force any concurrent rq->curr stores to complete, relying on
+ // the fact that a store instruction is a tiny region with preemption
+ // disabled, and thus an RCU read-side critical section.
+ synchronize_rcu();
+
// Disable CPU hotplug across the CPU scan for the benefit of
// any IPIs that might be needed. This also waits for all readers
// in CPU-hotplug code paths.