Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48902025 authored by Alex Chiang's avatar Alex Chiang Committed by Jesse Barnes
Browse files

PCI Hotplug: fakephp: fix deadlock... again



Commit fe99740c (construct one
fakephp slot per PCI slot) introduced a regression, causing a
deadlock when removing a PCI device.

We also never actually removed the device from the PCI core.

So we:

	- remove the device from the PCI core
	- do not directly call remove_slot() to prevent deadlock

Yu Zhao reported and diagnosed this defect.

Signed-off-by: default avatarAlex Chiang <achiang@hp.com>
Acked-by: default avatarYu Zhao <yu.zhao@intel.com>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent 53bc8870
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -320,15 +320,15 @@ static int disable_slot(struct hotplug_slot *slot)
			return -ENODEV;
		}

		/* remove the device from the pci core */
		pci_remove_bus_device(dev);

		/* queue work item to blow away this sysfs entry and other
		 * parts.
		 */
		INIT_WORK(&dslot->remove_work, remove_slot_worker);
		queue_work(dummyphp_wq, &dslot->remove_work);

		/* blow away this sysfs entry and other parts. */
		remove_slot(dslot);

		pci_dev_put(dev);
	}
	return 0;