From 764134bd184c242e0206d6e892a9dfa6c94fd9ee Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Tue, 10 Jul 2012 22:43:02 +0200 Subject: [PATCH] remove bug by searching lapci on a 64bit system --- arch/x86/kernel/apic.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index 9cb50922..aacc57d5 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c @@ -738,11 +738,21 @@ check_lapic: lapic = 0xFEE00000; } #else - if (apic_config->lapic == 0xFEE00000) { - // On a x64 system, we already map the lapic below the kernel - lapic = (size_t)&kernel_start - 0x1000; + if (apic_config) { + if (apic_config->lapic == 0xFEE00000) { + // On a x64 system, we already map the lapic below the kernel + lapic = (size_t)&kernel_start - 0x1000; + } else { + lapic = apic_config->lapic; + } } else { - lapic = apic_config->lapic; + uint32_t edx, dummy=0; + + cpuid(0x1, &dummy, &dummy, &dummy, &edx); + if (edx & (1 << 9)) { + // On a x64 system, we already map the lapic below the kernel + lapic = (size_t)&kernel_start - 0x1000; + } } #endif