x86/IO-APIC: fix setting of destinations
authorJan Beulich <jbeulich@suse.com>
Thu, 19 Nov 2015 15:46:10 +0000 (16:46 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 19 Nov 2015 15:46:10 +0000 (16:46 +0100)
In commit a85da715cf ("x86/IO-APIC: adjust setting of destinations") I
made a pretty blatant mistake: get_apic_id() can be used there only
when running APICs in physical mode. For both flat and clustered modes
the change was wrong, causing different kinds of boot problems on
affected systems. Don't revert that change though, but use TARGET_CPUS
(equaling cpu_online_map, and with there only being a single online CPU
fulfilling the original commits intention).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/io_apic.c

index 11a0e5d714712d3d05eb494996950c09744a146d..c2229adbacf1b305a1c6196e5bd6dc60093828e7 100644 (file)
@@ -1039,7 +1039,7 @@ static void __init setup_IO_APIC_irqs(void)
                 disable_8259A_irq(irq_to_desc(irq));
 
             desc = irq_to_desc(irq);
-            SET_DEST(entry, logical, get_apic_id());
+            SET_DEST(entry, logical, cpu_mask_to_apicid(TARGET_CPUS));
             spin_lock_irqsave(&ioapic_lock, flags);
             __ioapic_write_entry(apic, pin, 0, entry);
             set_native_irq_info(irq, TARGET_CPUS);