mirror of https://gitee.com/openkylin/linux.git
rcu: Fix existing exp request check in sync_sched_exp_online_cleanup()
[ Upstream commitf0b2b2df54
] 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:e015a34112
("rcu: Avoid self-IPI in sync_sched_exp_online_cleanup()") Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
3998e06d95
commit
4a9334d04b
|
@ -760,7 +760,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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue