ACPI events broken on non-SMP since 3.16

From: Jim Bos
Date: Sun Apr 05 2015 - 10:43:34 EST



Hello,

Since around 3.16 ACPI events aren't working on a single processor
system, I found this on an old Dell laptop Pentium-M and on AMD geode board.
By ACPI events I mean, acpid (via netlink) and acpi_listen doesn't give
anything when pressing ACPI power button.

Simply 'nosmp' on recent kernel on modern 2-core Celeron system also
stops acpid from working.
Note that booting an SMP kernel with single core isn't enough to break
this, smp really needs to be disabled by 'nosmp' or running it on a
older motherboard without I/O apic ('smbboot: SMP disabled' in dmesg).

With some problems managed to bisect this using VirtualBox guest, which
allows to to specify number of CPU's and having yes/no an I/O Apic.

It bisects to this commit which unfortunately doesn't revert cleanly on
latest 4.0-rcX:

commit 16ee7b3dcc56be14b9a813612cff2cc2339cdced
Author: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx>
Date: Mon Jun 9 16:20:04 2014 +0800

x86, irq: Simplify the way to handle ISA IRQ

On startup, setup_IO_APIC_irqs() will program all IOAPIC pins for ISA
IRQs. Later when mp_map_pin_to_irq() is called, it just returns ISA IRQ
number without programming corresponding IOAPIC pin.

This patch consolidates the way to program IOAPIC pins for both ISA and
non-ISA IRQs into mp_map_pin_to_irq() as below:
1) For ISA IRQs, mp_irqs array is used to map IOAPIC pin to IRQ and
mp_irqdomain_map() is used to actually program the pin.
2) For non-ISA IRQs, irqdomain is used to map IOAPIC pin to IRQ, and
mp_irqdomain_map() is also used to actually program the pin.


Any ideas ?
_
Jim
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/