summaryrefslogtreecommitdiffstats
path: root/drivers/pci/hotplug/pciehp_pci.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2013-08-12 19:51:43 +0200
committerIngo Molnar <mingo@kernel.org>2013-08-12 19:51:43 +0200
commit6356bb0ad6525dae93c06478a098ed3848e9ab01 (patch)
tree8fdbda28405fb0b1c213f2a87c532a760510adf0 /drivers/pci/hotplug/pciehp_pci.c
parent7781544e7c367d0cae87feb0f0675fd333bfc9d8 (diff)
parent0ca06c0857aee11911f91621db14498496f2c2cd (diff)
downloadlinux-stable-6356bb0ad6525dae93c06478a098ed3848e9ab01.tar.gz
linux-stable-6356bb0ad6525dae93c06478a098ed3848e9ab01.tar.bz2
linux-stable-6356bb0ad6525dae93c06478a098ed3848e9ab01.zip
Merge tag 'please-pull-mce-f-bit' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras into x86/ras
Pull MCE-uncorrected-error fix from Tony Luck: "Bit 12 may or may not be set in MCi_STATUS.MCACOD when an uncorrected error is reported. Ignore it when checking error signatures." Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/pci/hotplug/pciehp_pci.c')
-rw-r--r--drivers/pci/hotplug/pciehp_pci.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c
index aac7a40e4a4a..0e0d0f7f63fd 100644
--- a/drivers/pci/hotplug/pciehp_pci.c
+++ b/drivers/pci/hotplug/pciehp_pci.c
@@ -92,7 +92,14 @@ int pciehp_unconfigure_device(struct slot *p_slot)
if (ret)
presence = 0;
- list_for_each_entry_safe(dev, temp, &parent->devices, bus_list) {
+ /*
+ * Stopping an SR-IOV PF device removes all the associated VFs,
+ * which will update the bus->devices list and confuse the
+ * iterator. Therefore, iterate in reverse so we remove the VFs
+ * first, then the PF. We do the same in pci_stop_bus_device().
+ */
+ list_for_each_entry_safe_reverse(dev, temp, &parent->devices,
+ bus_list) {
pci_dev_get(dev);
if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE && presence) {
pci_read_config_byte(dev, PCI_BRIDGE_CONTROL, &bctl);