• Vitaly Kuznetsov's avatar
    PCI: hv: Report resources release after stopping the bus · 4066b088
    Vitaly Kuznetsov authored
    BugLink: http://bugs.launchpad.net/bugs/1581243
    
    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: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Acked-by: default avatarJake Oshins <jakeo@microsoft.com>
    (cherry picked from commit deb22e5c)
    Signed-off-by: default avatarJoseph Salisbury <joseph.salisbury@canonical.com>
    Acked-by: default avatarBrad Figg <brad.figg@canonical.com>
    Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
    4066b088
pci-hyperv.c 64.6 KB