Skip to content
  • Rafael J. Wysocki's avatar
    ACPI / hotplug / PCI: Check ignore_hotplug for all downstream devices · d41be346
    Rafael J. Wysocki authored
    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: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    d41be346