| From foo@baz Wed Dec 6 18:04:41 CET 2017 |
| From: Lu Baolu <baolu.lu@linux.intel.com> |
| Date: Thu, 5 Oct 2017 11:21:43 +0300 |
| Subject: usb: xhci: Return error when host is dead in xhci_disable_slot() |
| |
| From: Lu Baolu <baolu.lu@linux.intel.com> |
| |
| |
| [ Upstream commit dcabc76fa9361186e6b88c30a68db8fa9d5b4a1c ] |
| |
| xhci_disable_slot() is a helper for disabling a slot when a device |
| goes away or recovers from error situations. Currently, it returns |
| success when it sees a dead host. This is not the right way to go. |
| It should return error and let the invoker know that disable slot |
| command was failed due to a dead host. |
| |
| Fixes: f9e609b82479 ("usb: xhci: Add helper function xhci_disable_slot().") |
| Cc: Guoqing Zhang <guoqing.zhang@intel.com> |
| Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <alexander.levin@verizon.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/host/xhci.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/drivers/usb/host/xhci.c |
| +++ b/drivers/usb/host/xhci.c |
| @@ -3583,10 +3583,9 @@ int xhci_disable_slot(struct xhci_hcd *x |
| state = readl(&xhci->op_regs->status); |
| if (state == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING) || |
| (xhci->xhc_state & XHCI_STATE_HALTED)) { |
| - xhci_free_virt_device(xhci, slot_id); |
| spin_unlock_irqrestore(&xhci->lock, flags); |
| kfree(command); |
| - return ret; |
| + return -ENODEV; |
| } |
| |
| ret = xhci_queue_slot_control(xhci, command, TRB_DISABLE_SLOT, |