On Wed, Aug 18, 2021 at 01:34:00PM +0530, Neeraj Upadhyay wrote: > The sync_sched_exp_online_cleanup() checks to see if RCU needs > an expedited quiescent state from the incoming CPU, sending it > an IPI if so. Before sending IPI, it checks whether expedited > qs need has been already requested for the incoming CPU, by > checking rcu_data.cpu_no_qs.b.exp for the current cpu, on which > sync_sched_exp_online_cleanup() is running. This works for the > case where incoming CPU is same as self. However, for the case > where incoming CPU is different from self, expedited request > won't get marked, which can potentially delay reporting of > expedited quiescent state for the incoming CPU. > > Fixes: e015a3411220 ("rcu: Avoid self-IPI in sync_sched_exp_online_cleanup()") > Signed-off-by: Neeraj Upadhyay <neeraju@xxxxxxxxxxxxxx> Good catch!!! I have queued this for further review and testing, thank you! Thanx, Paul > --- > kernel/rcu/tree_exp.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h > index d9e4f8e..f3947c4 100644 > --- a/kernel/rcu/tree_exp.h > +++ b/kernel/rcu/tree_exp.h > @@ -759,7 +759,7 @@ static void sync_sched_exp_online_cleanup(int cpu) > my_cpu = get_cpu(); > /* Quiescent state either not needed or already requested, leave. */ > if (!(READ_ONCE(rnp->expmask) & rdp->grpmask) || > - __this_cpu_read(rcu_data.cpu_no_qs.b.exp)) { > + rdp->cpu_no_qs.b.exp) { > put_cpu(); > return; > } > -- > QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > hosted by The Linux Foundation >