linux-kernel

What do boot option noapic and noacpi actually do?


I had issues booting Ubuntu on a machine and adding noapic and noacpi to vmlinuz boot option solved the issue.

I am aware of noapic is to disable interrupt remap and noacpi is related to power config, but what do they actually do in linux kernel? Do they skip loading specific modules?


Solution

  • As per Linux Admin Guide Kernel Parameters documentation,

    noapic          [SMP,APIC] Tells the kernel to not make use of any
                    IOAPICs that may be present in the system.
    pci=noacpi      [X86] Do not use ACPI for IRQ routing
                or for PCI scanning.
    

    From a programmatic perspective noapic sets the variable disable_apic to 1 in setup_disableapic of /arch/x86/kernel/apic/apic.c which results in apic_intr_mode_select returning APIC_PIC, which results in the apic_intr_mode_init function leaving the PIC in PIC mode(8259) and in default_setup_apic_routing not being called.

    And pci=noacpi calls results in parse_pci(char *arg) in https://elixir.bootlin.com/linux/v4.19/source/arch/x86/kernel/acpi/boot.c#L1689, calling acpi_disable_pci which sets acpi_pci_disabled to 1 and calls acpi_noirq_set to do as specified by the documentation.

    For additional background information, see the following resources What are the "acpi" and "noapic" kernel boot options? Redhat Knowledge Base and IRQ, ACPI and APIC and the Linux kernel