diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-22 11:59:49 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-22 11:59:49 -0500 |
commit | 2702e0a46c2d28da92b32c9b068ee1291fc0de35 (patch) | |
tree | c1e9868a4b91beeebd5f4e820588bc2ae8371911 /arch/x86/kernel/apic.c | |
parent | 42bb8cc5e81028e217105299001070d57eb84ad7 (diff) | |
parent | adfafefd104d840ee4461965f22624d77532675b (diff) |
Merge branch 'linus' into timers/hpet
Diffstat (limited to 'arch/x86/kernel/apic.c')
-rw-r--r-- | arch/x86/kernel/apic.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index 566a08466b19..570f36e44e59 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #include <asm/proto.h> | 47 | #include <asm/proto.h> |
48 | #include <asm/apic.h> | 48 | #include <asm/apic.h> |
49 | #include <asm/i8259.h> | 49 | #include <asm/i8259.h> |
50 | #include <asm/smp.h> | ||
50 | 51 | ||
51 | #include <mach_apic.h> | 52 | #include <mach_apic.h> |
52 | #include <mach_apicdef.h> | 53 | #include <mach_apicdef.h> |
@@ -861,7 +862,7 @@ void clear_local_APIC(void) | |||
861 | } | 862 | } |
862 | 863 | ||
863 | /* lets not touch this if we didn't frob it */ | 864 | /* lets not touch this if we didn't frob it */ |
864 | #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(X86_MCE_INTEL) | 865 | #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL) |
865 | if (maxlvt >= 5) { | 866 | if (maxlvt >= 5) { |
866 | v = apic_read(APIC_LVTTHMR); | 867 | v = apic_read(APIC_LVTTHMR); |
867 | apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED); | 868 | apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED); |
@@ -894,6 +895,10 @@ void disable_local_APIC(void) | |||
894 | { | 895 | { |
895 | unsigned int value; | 896 | unsigned int value; |
896 | 897 | ||
898 | /* APIC hasn't been mapped yet */ | ||
899 | if (!apic_phys) | ||
900 | return; | ||
901 | |||
897 | clear_local_APIC(); | 902 | clear_local_APIC(); |
898 | 903 | ||
899 | /* | 904 | /* |
@@ -1431,7 +1436,7 @@ static int __init detect_init_APIC(void) | |||
1431 | switch (boot_cpu_data.x86_vendor) { | 1436 | switch (boot_cpu_data.x86_vendor) { |
1432 | case X86_VENDOR_AMD: | 1437 | case X86_VENDOR_AMD: |
1433 | if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) || | 1438 | if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) || |
1434 | (boot_cpu_data.x86 == 15)) | 1439 | (boot_cpu_data.x86 >= 15)) |
1435 | break; | 1440 | break; |
1436 | goto no_apic; | 1441 | goto no_apic; |
1437 | case X86_VENDOR_INTEL: | 1442 | case X86_VENDOR_INTEL: |
@@ -1832,6 +1837,11 @@ void __cpuinit generic_processor_info(int apicid, int version) | |||
1832 | num_processors++; | 1837 | num_processors++; |
1833 | cpu = cpumask_next_zero(-1, cpu_present_mask); | 1838 | cpu = cpumask_next_zero(-1, cpu_present_mask); |
1834 | 1839 | ||
1840 | if (version != apic_version[boot_cpu_physical_apicid]) | ||
1841 | WARN_ONCE(1, | ||
1842 | "ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n", | ||
1843 | apic_version[boot_cpu_physical_apicid], cpu, version); | ||
1844 | |||
1835 | physid_set(apicid, phys_cpu_present_map); | 1845 | physid_set(apicid, phys_cpu_present_map); |
1836 | if (apicid == boot_cpu_physical_apicid) { | 1846 | if (apicid == boot_cpu_physical_apicid) { |
1837 | /* | 1847 | /* |