|
@@ -82,30 +82,27 @@ static inline void send_IPI_mask_sequence(cpumask_t mask, int vector)
|
|
|
*/
|
|
|
local_irq_save(flags);
|
|
|
|
|
|
- for (query_cpu = 0; query_cpu < NR_CPUS; ++query_cpu) {
|
|
|
- if (cpu_isset(query_cpu, mask)) {
|
|
|
-
|
|
|
- /*
|
|
|
- * Wait for idle.
|
|
|
- */
|
|
|
- apic_wait_icr_idle();
|
|
|
-
|
|
|
- /*
|
|
|
- * prepare target chip field
|
|
|
- */
|
|
|
- cfg = __prepare_ICR2(x86_cpu_to_apicid[query_cpu]);
|
|
|
- apic_write_around(APIC_ICR2, cfg);
|
|
|
-
|
|
|
- /*
|
|
|
- * program the ICR
|
|
|
- */
|
|
|
- cfg = __prepare_ICR(0, vector, APIC_DEST_PHYSICAL);
|
|
|
-
|
|
|
- /*
|
|
|
- * Send the IPI. The write to APIC_ICR fires this off.
|
|
|
- */
|
|
|
- apic_write_around(APIC_ICR, cfg);
|
|
|
- }
|
|
|
+ for_each_cpu_mask(query_cpu, mask) {
|
|
|
+ /*
|
|
|
+ * Wait for idle.
|
|
|
+ */
|
|
|
+ apic_wait_icr_idle();
|
|
|
+
|
|
|
+ /*
|
|
|
+ * prepare target chip field
|
|
|
+ */
|
|
|
+ cfg = __prepare_ICR2(x86_cpu_to_apicid[query_cpu]);
|
|
|
+ apic_write_around(APIC_ICR2, cfg);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * program the ICR
|
|
|
+ */
|
|
|
+ cfg = __prepare_ICR(0, vector, APIC_DEST_PHYSICAL);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Send the IPI. The write to APIC_ICR fires this off.
|
|
|
+ */
|
|
|
+ apic_write_around(APIC_ICR, cfg);
|
|
|
}
|
|
|
local_irq_restore(flags);
|
|
|
}
|