|
@@ -3716,24 +3716,22 @@ retry_ipi:
|
|
|
ret = smp_call_function_single(cpu, func, rsp, 0);
|
|
|
if (!ret) {
|
|
|
mask_ofl_ipi &= ~mask;
|
|
|
- } else {
|
|
|
- /* Failed, raced with offline. */
|
|
|
- raw_spin_lock_irqsave_rcu_node(rnp, flags);
|
|
|
- if (cpu_online(cpu) &&
|
|
|
- (rnp->expmask & mask)) {
|
|
|
- raw_spin_unlock_irqrestore(&rnp->lock,
|
|
|
- flags);
|
|
|
- schedule_timeout_uninterruptible(1);
|
|
|
- if (cpu_online(cpu) &&
|
|
|
- (rnp->expmask & mask))
|
|
|
- goto retry_ipi;
|
|
|
- raw_spin_lock_irqsave_rcu_node(rnp,
|
|
|
- flags);
|
|
|
- }
|
|
|
- if (!(rnp->expmask & mask))
|
|
|
- mask_ofl_ipi &= ~mask;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ /* Failed, raced with offline. */
|
|
|
+ raw_spin_lock_irqsave_rcu_node(rnp, flags);
|
|
|
+ if (cpu_online(cpu) &&
|
|
|
+ (rnp->expmask & mask)) {
|
|
|
raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
|
|
+ schedule_timeout_uninterruptible(1);
|
|
|
+ if (cpu_online(cpu) &&
|
|
|
+ (rnp->expmask & mask))
|
|
|
+ goto retry_ipi;
|
|
|
+ raw_spin_lock_irqsave_rcu_node(rnp, flags);
|
|
|
}
|
|
|
+ if (!(rnp->expmask & mask))
|
|
|
+ mask_ofl_ipi &= ~mask;
|
|
|
+ raw_spin_unlock_irqrestore(&rnp->lock, flags);
|
|
|
}
|
|
|
/* Report quiescent states for those that went offline. */
|
|
|
mask_ofl_test |= mask_ofl_ipi;
|