USB: xhci: Stop debugging polling loop when HC dies.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Wed, 16 Sep 2009 23:42:30 +0000 (16:42 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 9 Oct 2009 20:52:06 +0000 (13:52 -0700)
If the host controller card is removed from the system, stop the timer
function to debug the xHCI rings.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/xhci-hcd.c

index 99911e727e0b7950e4a11dec17bb17f08151e5e4..8719a3f6851d0c8465e3bca972e3b408ddf292a8 100644 (file)
@@ -335,6 +335,12 @@ void xhci_event_ring_work(unsigned long arg)
        spin_lock_irqsave(&xhci->lock, flags);
        temp = xhci_readl(xhci, &xhci->op_regs->status);
        xhci_dbg(xhci, "op reg status = 0x%x\n", temp);
+       if (temp == 0xffffffff) {
+               xhci_dbg(xhci, "HW died, polling stopped.\n");
+               spin_unlock_irqrestore(&xhci->lock, flags);
+               return;
+       }
+
        temp = xhci_readl(xhci, &xhci->ir_set->irq_pending);
        xhci_dbg(xhci, "ir_set 0 pending = 0x%x\n", temp);
        xhci_dbg(xhci, "No-op commands handled = %d\n", xhci->noops_handled);