x86/Hyper-V: Set x2apic destination mode to physical when x2apic is available
authorLan Tianyu <Tianyu.Lan@microsoft.com>
Wed, 27 Feb 2019 14:54:03 +0000 (22:54 +0800)
committerJoerg Roedel <jroedel@suse.de>
Thu, 28 Feb 2019 10:12:16 +0000 (11:12 +0100)
Hyper-V doesn't provide irq remapping for IO-APIC. To enable x2apic,
set x2apic destination mode to physcial mode when x2apic is available
and Hyper-V IOMMU driver makes sure cpus assigned with IO-APIC irqs have
8-bit APIC id.

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Lan Tianyu <Tianyu.Lan@microsoft.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
arch/x86/kernel/cpu/mshyperv.c

index e81a2db42df7ba0d6fb28d9b0b2fcf0340bbd585..3fa238a137d2d1f90eb8a3734eab65d0f01c70b9 100644 (file)
@@ -328,6 +328,18 @@ static void __init ms_hyperv_init_platform(void)
 # ifdef CONFIG_SMP
        smp_ops.smp_prepare_boot_cpu = hv_smp_prepare_boot_cpu;
 # endif
+
+       /*
+        * Hyper-V doesn't provide irq remapping for IO-APIC. To enable x2apic,
+        * set x2apic destination mode to physcial mode when x2apic is available
+        * and Hyper-V IOMMU driver makes sure cpus assigned with IO-APIC irqs
+        * have 8-bit APIC id.
+        */
+# ifdef CONFIG_X86_X2APIC
+       if (x2apic_supported())
+               x2apic_phys = 1;
+# endif
+
 #endif
 }