Comment 12 for bug 1479031

Revision history for this message
Dan Streetman (ddstreet) wrote :

Here is a PPA with a fix for this:

https://pad.lv/ppa/ddstreet/lp1479031

There was no code change required; the only change is the acpiphp driver is built-in, instead of a module.

During boot, when the pci-acpi driver is loaded, it enumerates the bus. Later when the acpiphp driver is loaded, it registers for any pci-acpi hotplug events. Between the pci-acpi driver loading and the acpiphp driver loading, any pci acpi hotplug events are lost, since the bus was already enumerated and there is no driver monitoring hotplugs.

Currently (without this PPA), pci-acpi is built-in, and enumerates the pci acpi devices/buses during boot. The acpiphp driver is a module, however, and therefore loads much later - more than 4 seconds later, in my brief tests. With this PPA, the acpiphp driver is built-in, and loads a fraction of a second after the pci-acpi driver - less than 1/4 second in my brief tests.

So to clarify, this does not eliminate the window of time where pci acpi hotplug events will be lost, it only reduces it from multiple seconds, down to a small fraction of a second.

You can check the size of the window where hotplug events will be lost with:
# dmesg | grep "ACPI: bus type pci"
[ 0.230350] ACPI: bus type pci registered
# dmesg | grep "acpiphp: ACPI"
[ 0.517999] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5

that's not the exact window, since pci enumeration happens after the bus type is registered, so it's a bit smaller than that.