From: Paul E. McKenney Date: Fri, 25 Oct 2024 22:56:17 +0000 (-0700) Subject: rcu: Move rcu_report_exp_rdp() setting of ->cpu_no_qs.b.exp under lock X-Git-Tag: block-6.14-20240131~44^2~6 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=e2bd168295e4eb719a343086baddfe0abca512a2;p=linux-block.git rcu: Move rcu_report_exp_rdp() setting of ->cpu_no_qs.b.exp under lock This commit reduces the state space of rcu_report_exp_rdp() by moving the setting of ->cpu_no_qs.b.exp under the rcu_node structure's ->lock. The lock isn't really all that important here, given that this per-CPU field is supposed to be written only by its CPU, but the disabling of interrupts excludes things like rcu_exp_handler(), which also can write to this same field. Avoiding this sort of interleaved access reduces the state space. Signed-off-by: Paul E. McKenney Cc: Frederic Weisbecker Signed-off-by: Uladzislau Rezki (Sony) --- diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h index 581e88d39542..5c4ea66cc00d 100644 --- a/kernel/rcu/tree_exp.h +++ b/kernel/rcu/tree_exp.h @@ -260,8 +260,8 @@ static void rcu_report_exp_rdp(struct rcu_data *rdp) unsigned long flags; struct rcu_node *rnp = rdp->mynode; - WRITE_ONCE(rdp->cpu_no_qs.b.exp, false); raw_spin_lock_irqsave_rcu_node(rnp, flags); + WRITE_ONCE(rdp->cpu_no_qs.b.exp, false); rcu_report_exp_cpu_mult(rnp, flags, rdp->grpmask, true); }