diff options
-rw-r--r-- | arch/x86/kernel/apic.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/io_apic.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot.c | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index 0f830e4f5675..c3dd64fabcf3 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c | |||
@@ -1126,6 +1126,11 @@ void __cpuinit setup_local_APIC(void) | |||
1126 | unsigned int value; | 1126 | unsigned int value; |
1127 | int i, j; | 1127 | int i, j; |
1128 | 1128 | ||
1129 | if (disable_apic) { | ||
1130 | disable_ioapic_setup(); | ||
1131 | return; | ||
1132 | } | ||
1133 | |||
1129 | #ifdef CONFIG_X86_32 | 1134 | #ifdef CONFIG_X86_32 |
1130 | /* Pound the ESR really hard over the head with a big hammer - mbligh */ | 1135 | /* Pound the ESR really hard over the head with a big hammer - mbligh */ |
1131 | if (lapic_is_integrated() && esr_disable) { | 1136 | if (lapic_is_integrated() && esr_disable) { |
@@ -1566,11 +1571,11 @@ int apic_version[MAX_APICS]; | |||
1566 | 1571 | ||
1567 | int __init APIC_init_uniprocessor(void) | 1572 | int __init APIC_init_uniprocessor(void) |
1568 | { | 1573 | { |
1569 | #ifdef CONFIG_X86_64 | ||
1570 | if (disable_apic) { | 1574 | if (disable_apic) { |
1571 | pr_info("Apic disabled\n"); | 1575 | pr_info("Apic disabled\n"); |
1572 | return -1; | 1576 | return -1; |
1573 | } | 1577 | } |
1578 | #ifdef CONFIG_X86_64 | ||
1574 | if (!cpu_has_apic) { | 1579 | if (!cpu_has_apic) { |
1575 | disable_apic = 1; | 1580 | disable_apic = 1; |
1576 | pr_info("Apic disabled by BIOS\n"); | 1581 | pr_info("Apic disabled by BIOS\n"); |
diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c index 1c4a1302536c..40747e58f305 100644 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c | |||
@@ -3258,6 +3258,9 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_ms | |||
3258 | int err; | 3258 | int err; |
3259 | unsigned dest; | 3259 | unsigned dest; |
3260 | 3260 | ||
3261 | if (disable_apic) | ||
3262 | return -ENXIO; | ||
3263 | |||
3261 | cfg = irq_cfg(irq); | 3264 | cfg = irq_cfg(irq); |
3262 | err = assign_irq_vector(irq, cfg, TARGET_CPUS); | 3265 | err = assign_irq_vector(irq, cfg, TARGET_CPUS); |
3263 | if (err) | 3266 | if (err) |
@@ -3726,6 +3729,9 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
3726 | struct irq_cfg *cfg; | 3729 | struct irq_cfg *cfg; |
3727 | int err; | 3730 | int err; |
3728 | 3731 | ||
3732 | if (disable_apic) | ||
3733 | return -ENXIO; | ||
3734 | |||
3729 | cfg = irq_cfg(irq); | 3735 | cfg = irq_cfg(irq); |
3730 | err = assign_irq_vector(irq, cfg, TARGET_CPUS); | 3736 | err = assign_irq_vector(irq, cfg, TARGET_CPUS); |
3731 | if (!err) { | 3737 | if (!err) { |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index bb1a3b1fc87f..31f99ec2e0fd 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -1125,6 +1125,7 @@ static int __init smp_sanity_check(unsigned max_cpus) | |||
1125 | printk(KERN_ERR "... forcing use of dummy APIC emulation." | 1125 | printk(KERN_ERR "... forcing use of dummy APIC emulation." |
1126 | "(tell your hw vendor)\n"); | 1126 | "(tell your hw vendor)\n"); |
1127 | smpboot_clear_io_apic(); | 1127 | smpboot_clear_io_apic(); |
1128 | disable_ioapic_setup(); | ||
1128 | return -1; | 1129 | return -1; |
1129 | } | 1130 | } |
1130 | 1131 | ||