summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang Liu <jiang.liu@linux.intel.com>2015-01-07 08:31:34 +0100
committerThomas Gleixner <tglx@linutronix.de>2015-01-15 11:24:23 +0100
commitef1b2b8ad13858ab2f87c05261b8ce3253f90af9 (patch)
treef88badd20f29f214793411410bad1cb35e887317
parentx86/apic: Refine enable_IR_x2apic() and related functions (diff)
downloadlinux-ef1b2b8ad13858ab2f87c05261b8ce3253f90af9.tar.xz
linux-ef1b2b8ad13858ab2f87c05261b8ce3253f90af9.zip
x86/apic: Handle XAPIC remap mode proper.
If remapping is in XAPIC mode, the setup code just skips X2APIC initialization without checking max CPU APIC ID in system, which may cause problem if system has a CPU with APIC ID bigger than 255. Handle IR in XAPIC mode the same way as if remapping is disabled. [ tglx: Split out from previous patch ] Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> Cc: Tony Luck <tony.luck@intel.com> Cc: iommu@lists.linux-foundation.org Cc: H. Peter Anvin <hpa@linux.intel.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: David Rientjes <rientjes@google.com> Cc: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> Cc: Jan Beulich <JBeulich@suse.com> Cc: Richard Weinberger <richard@nod.at> Cc: Oren Twaig <oren@scalemp.com> Link: http://lkml.kernel.org/r/1420615903-28253-8-git-send-email-jiang.liu@linux.intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--arch/x86/kernel/apic/apic.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index fa77be8d0b17..04aec6bc7481 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -1596,7 +1596,7 @@ static __init void try_to_enable_x2apic(int ir_stat)
if (!x2apic_supported())
return;
- if (ir_stat < 0) {
+ if (ir_stat != IRQ_REMAP_X2APIC_MODE) {
/* IR is required if there is APIC ID > 255 even when running
* under KVM
*/
@@ -1613,10 +1613,6 @@ static __init void try_to_enable_x2apic(int ir_stat)
* only in physical mode
*/
x2apic_force_phys();
-
- } else if (ir_stat == IRQ_REMAP_XAPIC_MODE) {
- pr_info("x2apic not enabled, IRQ remapping is in xapic mode\n");
- return;
}
if (!x2apic_mode) {