linux/drivers/pci/host
Vitaly Kuznetsov deb22e5c84 PCI: hv: Report resources release after stopping the bus
Kernel hang is observed when pci-hyperv module is release with device
drivers still attached.  E.g., when I do 'rmmod pci_hyperv' with BCM5720
device pass-through-ed (tg3 module) I see the following:

 NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [rmmod:2104]
 ...
 Call Trace:
  [<ffffffffa0641487>] tg3_read_mem+0x87/0x100 [tg3]
  [<ffffffffa063f000>] ? 0xffffffffa063f000
  [<ffffffffa0644375>] tg3_poll_fw+0x85/0x150 [tg3]
  [<ffffffffa0649877>] tg3_chip_reset+0x357/0x8c0 [tg3]
  [<ffffffffa064ca8b>] tg3_halt+0x3b/0x190 [tg3]
  [<ffffffffa0657611>] tg3_stop+0x171/0x230 [tg3]
  ...
  [<ffffffffa064c550>] tg3_remove_one+0x90/0x140 [tg3]
  [<ffffffff813bee59>] pci_device_remove+0x39/0xc0
  [<ffffffff814a3201>] __device_release_driver+0xa1/0x160
  [<ffffffff814a32e3>] device_release_driver+0x23/0x30
  [<ffffffff813b794a>] pci_stop_bus_device+0x8a/0xa0
  [<ffffffff813b7ab6>] pci_stop_root_bus+0x36/0x60
  [<ffffffffa02c3f38>] hv_pci_remove+0x238/0x260 [pci_hyperv]

The problem seems to be that we report local resources release before
stopping the bus and removing devices from it and device drivers may try to
perform some operations with these resources on shutdown.  Move resources
release report after we do pci_stop_root_bus().

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Jake Oshins <jakeo@microsoft.com>
2016-05-02 15:40:42 -05:00
..
Kconfig Revert "PCI: dra7xx: Mark driver as broken" 2016-03-22 07:50:11 -05:00
Makefile Merge branch 'pci/host-hv' into next 2016-03-15 08:56:16 -05:00
pci-dra7xx.c PCI: designware: Add generic dw_pcie_wait_for_link() 2016-03-15 08:50:45 -05:00
pci-exynos.c PCI: designware: Add generic dw_pcie_wait_for_link() 2016-03-15 08:50:45 -05:00
pci-host-common.c PCI: generic: Expose pci_host_common_probe() for use by other drivers 2016-03-11 15:50:20 -06:00
pci-host-common.h PCI: generic: Expose pci_host_common_probe() for use by other drivers 2016-03-11 15:50:20 -06:00
pci-host-generic.c PCI: generic: Expose pci_host_common_probe() for use by other drivers 2016-03-11 15:50:20 -06:00
pci-hyperv.c PCI: hv: Report resources release after stopping the bus 2016-05-02 15:40:42 -05:00
pci-imx6.c Merge branch 'pci/host-designware' into next 2016-03-15 08:55:52 -05:00
pci-keystone-dw.c PCI: keystone: Fix MSI code that retrieves struct pcie_port pointer 2016-02-29 17:18:22 -06:00
pci-keystone.c Merge branch 'pci/host-designware' into next 2016-03-15 08:55:52 -05:00
pci-keystone.h PCI: designware: Make get_msi_addr() return phys_addr_t, not u32 2015-09-18 13:58:35 -05:00
pci-layerscape.c PCI changes for the v4.6 merge window: 2016-03-16 14:45:55 -07:00
pci-mvebu.c PCI: mvebu: Remove code restricting accesses to slot 0 2015-10-09 11:23:37 -05:00
pci-rcar-gen2.c PCI: rcar: Add gen2 fallback compatibility string for pci-rcar-gen2 2015-12-09 12:28:21 -06:00
pci-tegra.c PCI: tegra: Remove misleading PHYS_OFFSET 2016-03-08 15:42:56 -06:00
pci-thunder-ecam.c PCI: thunder: Add driver for ThunderX-pass{1,2} on-chip devices 2016-03-11 16:10:48 -06:00
pci-thunder-pem.c PCI: thunder: Add PCIe host driver for ThunderX processors 2016-03-11 15:53:41 -06:00
pci-versatile.c PCI: generic,versatile: Remove unused pci_sys_data structures 2015-11-25 12:08:04 -06:00
pci-xgene-msi.c irqdomain/msi: Use fwnode instead of of_node 2015-10-13 19:01:25 +02:00
pci-xgene.c PCI/MSI: xgene: Remove msi_controller assignment 2015-09-25 18:24:28 -05:00
pcie-altera-msi.c PCI changes for the v4.4 merge window: 2015-11-06 11:29:53 -08:00
pcie-altera.c PCI: altera: Fix altera_pcie_link_is_up() 2016-03-11 12:14:39 -06:00
pcie-designware-plat.c PCI: designware: Add driver for prototyping kits based on ARC SDP 2016-03-15 08:50:45 -05:00
pcie-designware.c PCI: designware: Add default link up check if sub-driver doesn't override 2016-03-15 08:50:45 -05:00
pcie-designware.h PCI: designware: Add generic dw_pcie_wait_for_link() 2016-03-15 08:50:45 -05:00
pcie-hisi.c PCI changes for the v4.5 merge window: 2016-01-21 11:52:16 -08:00
pcie-iproc-bcma.c PCI: iproc: Add iProc PCIe MSI support 2016-01-06 18:04:35 -06:00
pcie-iproc-msi.c PCI: iproc: Add iProc PCIe MSI support 2016-01-06 18:04:35 -06:00
pcie-iproc-platform.c PCI: iproc: Add iProc PCIe MSI support 2016-01-06 18:04:35 -06:00
pcie-iproc.c PCI: iproc: Allow multiple devices except on PAXC 2016-01-27 16:52:24 -06:00
pcie-iproc.h PCI: iproc: Add iProc PCIe MSI support 2016-01-06 18:04:35 -06:00
pcie-qcom.c PCI: designware: Add generic dw_pcie_wait_for_link() 2016-03-15 08:50:45 -05:00
pcie-rcar.c PCI: rcar: Remove PCI_PROBE_ONLY handling 2016-02-05 14:22:41 -06:00
pcie-spear13xx.c PCI: designware: Add generic dw_pcie_wait_for_link() 2016-03-15 08:50:45 -05:00
pcie-xilinx-nwl.c PCI: xilinx-nwl: Add support for Xilinx NWL PCIe Host Controller 2016-03-11 12:42:31 -06:00
pcie-xilinx.c PCI: xilinx: Don't call pci_fixup_irqs() on Microblaze 2016-03-08 14:06:17 -06:00