]> git.baikalelectronics.ru Git - 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)
commitef6a1bac1b6001ecad76e9fe7088b4d7592c88c9
tree189aafeadad5e3e1d8417bfec726ee090d9cb53b
parentbf4a00446173f6b0cced0d1e5aadf2b0f2a96616
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