Patch "PCI: hv: Properly handle PCI bus remove" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
PCI: hv: Properly handle PCI bus remove
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pci-hv-properly-handle-pci-bus-remove.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sun Mar 18 16:55:33 CET 2018
From: Long Li <[email protected]>
Date: Thu, 23 Mar 2017 14:58:10 -0700
Subject: PCI: hv: Properly handle PCI bus remove
From: Long Li <[email protected]>
[ Upstream commit d3a78d8bf759d8848339dcc367c4c1678b57a08b ]
hv_pci_devices_present() is called in hv_pci_remove() when we remove a PCI device from the host, e.g., by disabling SR-IOV on a device. In hv_pci_remove(), the bus is already removed before the call, so we don't need to rescan the bus in the workqueue scheduled from hv_pci_devices_present().
By introducing bus state hv_pcibus_removed, we can avoid this situation.
--- drivers/pci/host/pci-hyperv.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)
drivers/pci/host/pci-hyperv.c +17 -3
@@ -351,6 +351,7 @@ enum hv_pcibus_state { hv_pcibus_init =0 , hv_pcibus_probed, hv_pcibus_installed, + hv_pcibus_removed, hv_pcibus_maximum };
@@ -1489,13 +1490,24 @@ static void pci_devices_present_work(strput_pcichild (hpdev, hv_pcidev_ref_initial); } -/* Tell the core to rescan bus because there may have been changes. */ -if (hbus->state == hv_pcibus_installed) { +switch (hbus->state) { +case hv_pcibus_installed: +/* +* Tell the core to rescan bus +* because there may have been changes. +*/ pci_lock_rescan_remove ();pci_scan_child_bus (hbus->pci_bus);pci_unlock_rescan_remove (); - }else { +break ; + +case hv_pcibus_init: +case hv_pcibus_probed:survey_child_resources (hbus); +break ; + +default : +break ; }up (&hbus->enum_sem);
@@ -2170,6 +2182,7 @@ static int hv_pci_probe(struct hv_device hbus =kzalloc (sizeof (*hbus),GFP_KERNEL );if (!hbus)return -ENOMEM ; + hbus->state = hv_pcibus_init;/* * The PCI bus "domain" is what is called "segment" in ACPI and
@@ -2312,6 +2325,7 @@ static int hv_pci_remove(struct hv_devicpci_stop_root_bus (hbus->pci_bus);pci_remove_root_bus (hbus->pci_bus);pci_unlock_rescan_remove (); + hbus->state = hv_pcibus_removed; } ret =hv_send_resources_released (hdev);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/pci-hv-lock-pci-bus-on-device-eject.patch queue-4.9/pci-hv-properly-handle-pci-bus-remove.patch