diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-18 12:15:49 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-18 12:15:49 -0500 |
commit | af37501c792107c2bde1524bdae38d9a247b841a (patch) | |
tree | b50ee90d29e72956b8b7d8d19677fe5996755d49 /arch/x86/kernel/apic.c | |
parent | d859e29fe34cb833071b20aef860ee94fbad9bb2 (diff) | |
parent | 99937d6455cea95405ac681c86a857d0fcd530bd (diff) |
Merge branch 'core/percpu' into perfcounters/core
Conflicts:
arch/x86/include/asm/pda.h
We merge tip/core/percpu into tip/perfcounters/core because of a
semantic and contextual conflict: the former eliminates the PDA,
while the latter extends it with apic_perf_irqs field.
Resolve the conflict by moving the new field to the irq_cpustat
structure on 64-bit too.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/apic.c')
-rw-r--r-- | arch/x86/kernel/apic.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index d2d17b8d10f8..e9af14f748ea 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c | |||
@@ -48,6 +48,7 @@ | |||
48 | #include <asm/proto.h> | 48 | #include <asm/proto.h> |
49 | #include <asm/apic.h> | 49 | #include <asm/apic.h> |
50 | #include <asm/i8259.h> | 50 | #include <asm/i8259.h> |
51 | #include <asm/smp.h> | ||
51 | 52 | ||
52 | #include <mach_apic.h> | 53 | #include <mach_apic.h> |
53 | #include <mach_apicdef.h> | 54 | #include <mach_apicdef.h> |
@@ -895,6 +896,10 @@ void disable_local_APIC(void) | |||
895 | { | 896 | { |
896 | unsigned int value; | 897 | unsigned int value; |
897 | 898 | ||
899 | /* APIC hasn't been mapped yet */ | ||
900 | if (!apic_phys) | ||
901 | return; | ||
902 | |||
898 | clear_local_APIC(); | 903 | clear_local_APIC(); |
899 | 904 | ||
900 | /* | 905 | /* |
@@ -1126,6 +1131,11 @@ void __cpuinit setup_local_APIC(void) | |||
1126 | unsigned int value; | 1131 | unsigned int value; |
1127 | int i, j; | 1132 | int i, j; |
1128 | 1133 | ||
1134 | if (disable_apic) { | ||
1135 | disable_ioapic_setup(); | ||
1136 | return; | ||
1137 | } | ||
1138 | |||
1129 | #ifdef CONFIG_X86_32 | 1139 | #ifdef CONFIG_X86_32 |
1130 | /* Pound the ESR really hard over the head with a big hammer - mbligh */ | 1140 | /* Pound the ESR really hard over the head with a big hammer - mbligh */ |
1131 | if (lapic_is_integrated() && esr_disable) { | 1141 | if (lapic_is_integrated() && esr_disable) { |
@@ -1567,11 +1577,11 @@ int apic_version[MAX_APICS]; | |||
1567 | 1577 | ||
1568 | int __init APIC_init_uniprocessor(void) | 1578 | int __init APIC_init_uniprocessor(void) |
1569 | { | 1579 | { |
1570 | #ifdef CONFIG_X86_64 | ||
1571 | if (disable_apic) { | 1580 | if (disable_apic) { |
1572 | pr_info("Apic disabled\n"); | 1581 | pr_info("Apic disabled\n"); |
1573 | return -1; | 1582 | return -1; |
1574 | } | 1583 | } |
1584 | #ifdef CONFIG_X86_64 | ||
1575 | if (!cpu_has_apic) { | 1585 | if (!cpu_has_apic) { |
1576 | disable_apic = 1; | 1586 | disable_apic = 1; |
1577 | pr_info("Apic disabled by BIOS\n"); | 1587 | pr_info("Apic disabled by BIOS\n"); |
@@ -1869,17 +1879,8 @@ void __cpuinit generic_processor_info(int apicid, int version) | |||
1869 | #endif | 1879 | #endif |
1870 | 1880 | ||
1871 | #if defined(CONFIG_X86_SMP) || defined(CONFIG_X86_64) | 1881 | #if defined(CONFIG_X86_SMP) || defined(CONFIG_X86_64) |
1872 | /* are we being called early in kernel startup? */ | 1882 | early_per_cpu(x86_cpu_to_apicid, cpu) = apicid; |
1873 | if (early_per_cpu_ptr(x86_cpu_to_apicid)) { | 1883 | early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid; |
1874 | u16 *cpu_to_apicid = early_per_cpu_ptr(x86_cpu_to_apicid); | ||
1875 | u16 *bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid); | ||
1876 | |||
1877 | cpu_to_apicid[cpu] = apicid; | ||
1878 | bios_cpu_apicid[cpu] = apicid; | ||
1879 | } else { | ||
1880 | per_cpu(x86_cpu_to_apicid, cpu) = apicid; | ||
1881 | per_cpu(x86_bios_cpu_apicid, cpu) = apicid; | ||
1882 | } | ||
1883 | #endif | 1884 | #endif |
1884 | 1885 | ||
1885 | set_cpu_possible(cpu, true); | 1886 | set_cpu_possible(cpu, true); |