diff options
| -rw-r--r-- | arch/x86/include/asm/apic.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/apic.c | 9 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/probe_64.c | 13 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/x2apic_cluster.c | 5 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/x2apic_phys.c | 10 |
5 files changed, 18 insertions, 21 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index dce1bf696cca..a6208dc74633 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
| @@ -146,7 +146,7 @@ static inline u64 native_x2apic_icr_read(void) | |||
| 146 | return val; | 146 | return val; |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | extern int x2apic; | 149 | extern int x2apic, x2apic_phys; |
| 150 | extern void check_x2apic(void); | 150 | extern void check_x2apic(void); |
| 151 | extern void enable_x2apic(void); | 151 | extern void enable_x2apic(void); |
| 152 | extern void enable_IR_x2apic(void); | 152 | extern void enable_IR_x2apic(void); |
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index c12823eb55b5..47c2d12e5cf5 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
| @@ -1265,14 +1265,7 @@ void __cpuinit end_local_APIC_setup(void) | |||
| 1265 | #ifdef CONFIG_X86_X2APIC | 1265 | #ifdef CONFIG_X86_X2APIC |
| 1266 | void check_x2apic(void) | 1266 | void check_x2apic(void) |
| 1267 | { | 1267 | { |
| 1268 | int msr, msr2; | 1268 | if (x2apic_enabled()) { |
| 1269 | |||
| 1270 | if (!cpu_has_x2apic) | ||
| 1271 | return; | ||
| 1272 | |||
| 1273 | rdmsr(MSR_IA32_APICBASE, msr, msr2); | ||
| 1274 | |||
| 1275 | if (msr & X2APIC_ENABLE) { | ||
| 1276 | pr_info("x2apic enabled by BIOS, switching to x2apic ops\n"); | 1269 | pr_info("x2apic enabled by BIOS, switching to x2apic ops\n"); |
| 1277 | x2apic_preenabled = x2apic = 1; | 1270 | x2apic_preenabled = x2apic = 1; |
| 1278 | } | 1271 | } |
diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c index 70935dd904db..e7c163661c77 100644 --- a/arch/x86/kernel/apic/probe_64.c +++ b/arch/x86/kernel/apic/probe_64.c | |||
| @@ -50,9 +50,16 @@ static struct apic *apic_probe[] __initdata = { | |||
| 50 | void __init default_setup_apic_routing(void) | 50 | void __init default_setup_apic_routing(void) |
| 51 | { | 51 | { |
| 52 | #ifdef CONFIG_X86_X2APIC | 52 | #ifdef CONFIG_X86_X2APIC |
| 53 | if (apic == &apic_x2apic_phys || apic == &apic_x2apic_cluster) { | 53 | if (x2apic && (apic != &apic_x2apic_phys && |
| 54 | if (!intr_remapping_enabled) | 54 | #ifdef CONFIG_X86_UV |
| 55 | apic = &apic_flat; | 55 | apic != &apic_x2apic_uv_x && |
| 56 | #endif | ||
| 57 | apic != &apic_x2apic_cluster)) { | ||
| 58 | if (x2apic_phys) | ||
| 59 | apic = &apic_x2apic_phys; | ||
| 60 | else | ||
| 61 | apic = &apic_x2apic_cluster; | ||
| 62 | printk(KERN_INFO "Setting APIC routing to %s\n", apic->name); | ||
| 56 | } | 63 | } |
| 57 | #endif | 64 | #endif |
| 58 | 65 | ||
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c index 4e39d9ad4d52..354b9c45601d 100644 --- a/arch/x86/kernel/apic/x2apic_cluster.c +++ b/arch/x86/kernel/apic/x2apic_cluster.c | |||
| @@ -14,10 +14,7 @@ DEFINE_PER_CPU(u32, x86_cpu_to_logical_apicid); | |||
| 14 | 14 | ||
| 15 | static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | 15 | static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
| 16 | { | 16 | { |
| 17 | if (cpu_has_x2apic) | 17 | return x2apic_enabled(); |
| 18 | return 1; | ||
| 19 | |||
| 20 | return 0; | ||
| 21 | } | 18 | } |
| 22 | 19 | ||
| 23 | /* Start with all IRQs pointing to boot CPU. IRQ balancing will shift them. */ | 20 | /* Start with all IRQs pointing to boot CPU. IRQ balancing will shift them. */ |
diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c index d2d52eb9f7ea..5bcb174409bc 100644 --- a/arch/x86/kernel/apic/x2apic_phys.c +++ b/arch/x86/kernel/apic/x2apic_phys.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include <asm/apic.h> | 10 | #include <asm/apic.h> |
| 11 | #include <asm/ipi.h> | 11 | #include <asm/ipi.h> |
| 12 | 12 | ||
| 13 | static int x2apic_phys; | 13 | int x2apic_phys; |
| 14 | 14 | ||
| 15 | static int set_x2apic_phys_mode(char *arg) | 15 | static int set_x2apic_phys_mode(char *arg) |
| 16 | { | 16 | { |
| @@ -21,10 +21,10 @@ early_param("x2apic_phys", set_x2apic_phys_mode); | |||
| 21 | 21 | ||
| 22 | static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | 22 | static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
| 23 | { | 23 | { |
| 24 | if (cpu_has_x2apic && x2apic_phys) | 24 | if (x2apic_phys) |
| 25 | return 1; | 25 | return x2apic_enabled(); |
| 26 | 26 | else | |
| 27 | return 0; | 27 | return 0; |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | /* Start with all IRQs pointing to boot CPU. IRQ balancing will shift them. */ | 30 | /* Start with all IRQs pointing to boot CPU. IRQ balancing will shift them. */ |
