On Mon, Apr 20, 2015 at 01:35:40PM -0400, Alan Stern wrote: > On Mon, 20 Apr 2015, Joe Lawrence wrote: > > > So -ESHUTDOWN = -108 (0xffffff94) provoked bad_action_ret into reporting > > a bogus return value and stack trace above. > > As far as I know, -Eanything is never a valid return code for an IRQ > handler. Shouldn't this always return either IRQ_NONE or IRQ_HANDLED? Hi Alan -- I would think so, though the stack trace in the STS_FATAL case might interesting to somebody? (Not sure what info in such trace is useful since it's an irq handler.) Even then, it should probably be replaced with a WARN_ONCE or similar instead of inadvertently through the bogus irq return value. How about the following one-liner? -- Joe -->8-- -->8-- -->8-- >From f8030d1cabbab1e7e5b0a0ba67fa4cd0a944d416 Mon Sep 17 00:00:00 2001 From: Joe Lawrence <joe.lawrence@xxxxxxxxxxx> Date: Mon, 20 Apr 2015 15:40:47 -0400 Subject: [PATCH] xhci: gracefully handle xhci_irq dead device If the xHCI host controller has died (ie, device removed) or suffered other serious fatal error (STS_FATAL), then xhci_irq should handle this condition with IRQ_HANDLED instead of -ESHUTDOWN. Signed-off-by: Joe Lawrence <joe.lawrence@xxxxxxxxxxx> --- drivers/usb/host/xhci-ring.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index f5397a517c54..0402b80d2c85 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -2640,7 +2640,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd) xhci_halt(xhci); hw_died: spin_unlock(&xhci->lock); - return -ESHUTDOWN; + return IRQ_HANDLED; } /* -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html