]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
ACPI / hotplug / PCI: Check ignore_hotplug for all downstream devices
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 20 May 2015 00:14:13 +0000 (02:14 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 22 May 2015 22:38:50 +0000 (17:38 -0500)
commitd41be3466f4243f1b198b76fe3bcd91d88194f12
tree189aafeadad5e3e1d8417bfec726ee090d9cb53b
parent2af31f415fa177dd11bc76f2a292b09330803c89
ACPI / hotplug / PCI: Check ignore_hotplug for all downstream devices

If the ignore_hotplug flag is set for a PCI device without an ACPI
companion and a bus check notification is received for an ancestor bridge
that is not the device's parent, ACPIPHP will ignore that flag.

Namely, in that case acpiphp_check_bridge() is called for the target bridge
and if all of the devices immediately below the bridge are still present,
trim_stale_devices() will be called for each of them.  That function
recursively walks the hierarchy downwards and removes device objects
corresponding to devices that don't appear to be present any more.
Unfortunately, it only checks ignore_hotplug for devices having ACPI
companions, so it will remove the others (if they don't respond) regardless
of the ignore_hotplug value.

Fix the problem by making trim_stale_devices() take ignore_hotplug into
consideration regardless of whether or not an ACPI companion is present for
the device it has been called for.

[bhelgaas: This may fix bug 61891, depending on whether the bridge above a
device is removed along with the device]
Link: https://bugzilla.kernel.org/show_bug.cgi?id=61891
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/hotplug/acpiphp_glue.c