diff options
author | Suresh Siddha <suresh.b.siddha@intel.com> | 2008-07-10 14:16:58 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-12 02:45:06 -0400 |
commit | 6e1cb38a2aef7680975e71f23de187859ee8b158 (patch) | |
tree | 4044df869c6314dcdac700f3fdd3cc256cc9d3a7 /arch/x86/kernel/smpboot.c | |
parent | 75c46fa61bc5b4ccd20a168ff325c58771248fcd (diff) |
x64, x2apic/intr-remap: add x2apic support, including enabling interrupt-remapping
x2apic support. Interrupt-remapping must be enabled before enabling x2apic,
this is needed to ensure that IO interrupts continue to work properly after the
cpu mode is changed to x2apic(which uses 32bit extended physical/cluster
apic id).
On systems where apicid's are > 255, BIOS can handover the control to OS in
x2apic mode. Or if the OS handover was in legacy xapic mode, check
if it is capable of x2apic mode. And if we succeed in enabling
Interrupt-remapping, then we can enable x2apic mode in the CPU.
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: akpm@linux-foundation.org
Cc: arjan@linux.intel.com
Cc: andi@firstfloor.org
Cc: ebiederm@xmission.com
Cc: jbarnes@virtuousgeek.org
Cc: steiner@sgi.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r-- | arch/x86/kernel/smpboot.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index c55263b3df02..0c43e1f2e7d3 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -1145,6 +1145,11 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) | |||
1145 | current_thread_info()->cpu = 0; /* needed? */ | 1145 | current_thread_info()->cpu = 0; /* needed? */ |
1146 | set_cpu_sibling_map(0); | 1146 | set_cpu_sibling_map(0); |
1147 | 1147 | ||
1148 | #ifdef CONFIG_X86_64 | ||
1149 | enable_IR_x2apic(); | ||
1150 | setup_apic_routing(); | ||
1151 | #endif | ||
1152 | |||
1148 | if (smp_sanity_check(max_cpus) < 0) { | 1153 | if (smp_sanity_check(max_cpus) < 0) { |
1149 | printk(KERN_INFO "SMP disabled\n"); | 1154 | printk(KERN_INFO "SMP disabled\n"); |
1150 | disable_smp(); | 1155 | disable_smp(); |