• Rafael J. Wysocki's avatar
    ACPI / hotplug / PCI: Move PCI rescan-remove locking to hotplug_event() · f41b3261
    Rafael J. Wysocki authored
    Commit 9217a984 (ACPI / hotplug / PCI: Use global PCI rescan-remove
    locking) modified ACPIPHP to protect its PCI device removal and addition
    code paths from races against sysfs-driven rescan and remove operations
    with the help of PCI rescan-remove locking.  However, it overlooked the
    fact that hotplug_event_work() is not the only caller of hotplug_event()
    which may also be called by dock_hotplug_event() and that code path
    is missing the PCI rescan-remove locking.  This means that, although
    the PCI rescan-remove lock is held as appropriate during the handling
    of events originating from handle_hotplug_event(), the ACPIPHP's
    operations resulting from dock events may still suffer the race
    conditions that commit 9217a984 was supposed to eliminate.
    
    To address that problem, move the PCI rescan-remove locking from
    hotplug_event_work() to hotplug_event() so that it is used regardless
    of the way that function is invoked.
    
    Revamps: 9217a984 (ACPI / hotplug / PCI: Use global PCI rescan-remove locking)
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Tested-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    f41b3261
acpiphp_glue.c 28.6 KB