|
@@ -532,6 +532,13 @@ again:
|
|
|
cpumask_or(tmpmask, tmpmask, tick_broadcast_force_mask);
|
|
|
cpumask_clear(tick_broadcast_force_mask);
|
|
|
|
|
|
+ /*
|
|
|
+ * Sanity check. Catch the case where we try to broadcast to
|
|
|
+ * offline cpus.
|
|
|
+ */
|
|
|
+ if (WARN_ON_ONCE(!cpumask_subset(tmpmask, cpu_online_mask)))
|
|
|
+ cpumask_and(tmpmask, tmpmask, cpu_online_mask);
|
|
|
+
|
|
|
/*
|
|
|
* Wakeup the cpus which have an expired event.
|
|
|
*/
|
|
@@ -773,10 +780,12 @@ void tick_shutdown_broadcast_oneshot(unsigned int *cpup)
|
|
|
raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
|
|
|
|
|
|
/*
|
|
|
- * Clear the broadcast mask flag for the dead cpu, but do not
|
|
|
- * stop the broadcast device!
|
|
|
+ * Clear the broadcast masks for the dead cpu, but do not stop
|
|
|
+ * the broadcast device!
|
|
|
*/
|
|
|
cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask);
|
|
|
+ cpumask_clear_cpu(cpu, tick_broadcast_pending_mask);
|
|
|
+ cpumask_clear_cpu(cpu, tick_broadcast_force_mask);
|
|
|
|
|
|
raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
|
|
|
}
|