Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 385c859f authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcu: Use RCU's online-CPU state for expedited IPI retry



This commit improves the accuracy of the interaction between CPU hotplug
operations and RCU's expedited grace periods by using RCU's online-CPU
state to determine when failed IPIs should be retried.

Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent 98834b83
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -385,17 +385,16 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
				mask_ofl_ipi &= ~mask;
				continue;
			}
			/* Failed, raced with offline. */
			/* Failed, raced with CPU hotplug operation. */
			raw_spin_lock_irqsave_rcu_node(rnp, flags);
			if (cpu_online(cpu) &&
			if ((rnp->qsmaskinitnext & mask) &&
			    (rnp->expmask & mask)) {
				/* Online, so delay for a bit and try again. */
				raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
				schedule_timeout_uninterruptible(1);
				if (cpu_online(cpu) &&
				    (rnp->expmask & mask))
				goto retry_ipi;
				raw_spin_lock_irqsave_rcu_node(rnp, flags);
			}
			/* CPU really is offline, so we can ignore it. */
			if (!(rnp->expmask & mask))
				mask_ofl_ipi &= ~mask;
			raw_spin_unlock_irqrestore_rcu_node(rnp, flags);