aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/apic.c7
-rw-r--r--arch/x86/kernel/io_apic.c6
-rw-r--r--arch/x86/kernel/smpboot.c1
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
1567int __init APIC_init_uniprocessor(void) 1572int __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