提交 fcf8f576 编写于 作者: S Sarah Sharp 提交者: Greg Kroah-Hartman

USB: xhci: Check if the host controller died in IRQ handler.

Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 d3512f63
...@@ -277,6 +277,9 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd) ...@@ -277,6 +277,9 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
/* Check if the xHC generated the interrupt, or the irq is shared */ /* Check if the xHC generated the interrupt, or the irq is shared */
temp = xhci_readl(xhci, &xhci->op_regs->status); temp = xhci_readl(xhci, &xhci->op_regs->status);
temp2 = xhci_readl(xhci, &xhci->ir_set->irq_pending); temp2 = xhci_readl(xhci, &xhci->ir_set->irq_pending);
if (temp == 0xffffffff && temp2 == 0xffffffff)
goto hw_died;
if (!(temp & STS_EINT) && !ER_IRQ_PENDING(temp2)) { if (!(temp & STS_EINT) && !ER_IRQ_PENDING(temp2)) {
spin_unlock(&xhci->lock); spin_unlock(&xhci->lock);
return IRQ_NONE; return IRQ_NONE;
...@@ -294,6 +297,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd) ...@@ -294,6 +297,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
if (temp & STS_FATAL) { if (temp & STS_FATAL) {
xhci_warn(xhci, "WARNING: Host System Error\n"); xhci_warn(xhci, "WARNING: Host System Error\n");
xhci_halt(xhci); xhci_halt(xhci);
hw_died:
xhci_to_hcd(xhci)->state = HC_STATE_HALT; xhci_to_hcd(xhci)->state = HC_STATE_HALT;
spin_unlock(&xhci->lock); spin_unlock(&xhci->lock);
return -ESHUTDOWN; return -ESHUTDOWN;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册