ACPI / hotplug / PCI: Move PCI rescan-remove locking to hotplug_event()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 3 Feb 2014 01:22:17 +0000 (02:22 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 3 Feb 2014 21:28:18 +0000 (22:28 +0100)
commitf41b32613138ae05329a0f0e7170223b775d6b24
tree9bc5cefef02934ca2a7fdb5308a58cf49909ea01
parent2d7c1b77dd59387070aab355532dd157f888325c
ACPI / hotplug / PCI: Move PCI rescan-remove locking to hotplug_event()

Commit 9217a984671e (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 9217a984671e 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: 9217a984671e (ACPI / hotplug / PCI: Use global PCI rescan-remove locking)
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/pci/hotplug/acpiphp_glue.c