Commit f1182638 authored by Jan Beulich's avatar Jan Beulich Committed by Ingo Molnar

x86: fully honor "nolapic"

Impact: widen the effect of the 'nolapic' boot parameter

"nolapic" should not only suppress SMP and use of the LAPIC, but it
also ought to have the effect of disabling all IO-APIC related activity
as well as PCI MSI and HT-IRQs.
Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 5cca0cf1
...@@ -1126,6 +1126,11 @@ void __cpuinit setup_local_APIC(void) ...@@ -1126,6 +1126,11 @@ void __cpuinit setup_local_APIC(void)
unsigned int value; unsigned int value;
int i, j; int i, j;
if (disable_apic) {
disable_ioapic_setup();
return;
}
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
/* Pound the ESR really hard over the head with a big hammer - mbligh */ /* Pound the ESR really hard over the head with a big hammer - mbligh */
if (lapic_is_integrated() && esr_disable) { if (lapic_is_integrated() && esr_disable) {
...@@ -1566,11 +1571,11 @@ int apic_version[MAX_APICS]; ...@@ -1566,11 +1571,11 @@ int apic_version[MAX_APICS];
int __init APIC_init_uniprocessor(void) int __init APIC_init_uniprocessor(void)
{ {
#ifdef CONFIG_X86_64
if (disable_apic) { if (disable_apic) {
pr_info("Apic disabled\n"); pr_info("Apic disabled\n");
return -1; return -1;
} }
#ifdef CONFIG_X86_64
if (!cpu_has_apic) { if (!cpu_has_apic) {
disable_apic = 1; disable_apic = 1;
pr_info("Apic disabled by BIOS\n"); pr_info("Apic disabled by BIOS\n");
......
...@@ -3258,6 +3258,9 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_ms ...@@ -3258,6 +3258,9 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_ms
int err; int err;
unsigned dest; unsigned dest;
if (disable_apic)
return -ENXIO;
cfg = irq_cfg(irq); cfg = irq_cfg(irq);
err = assign_irq_vector(irq, cfg, TARGET_CPUS); err = assign_irq_vector(irq, cfg, TARGET_CPUS);
if (err) if (err)
...@@ -3726,6 +3729,9 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) ...@@ -3726,6 +3729,9 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
struct irq_cfg *cfg; struct irq_cfg *cfg;
int err; int err;
if (disable_apic)
return -ENXIO;
cfg = irq_cfg(irq); cfg = irq_cfg(irq);
err = assign_irq_vector(irq, cfg, TARGET_CPUS); err = assign_irq_vector(irq, cfg, TARGET_CPUS);
if (!err) { if (!err) {
......
...@@ -1125,6 +1125,7 @@ static int __init smp_sanity_check(unsigned max_cpus) ...@@ -1125,6 +1125,7 @@ static int __init smp_sanity_check(unsigned max_cpus)
printk(KERN_ERR "... forcing use of dummy APIC emulation." printk(KERN_ERR "... forcing use of dummy APIC emulation."
"(tell your hw vendor)\n"); "(tell your hw vendor)\n");
smpboot_clear_io_apic(); smpboot_clear_io_apic();
disable_ioapic_setup();
return -1; return -1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment