diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-10-23 14:24:37 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-10-23 14:24:37 +0200 |
commit | 0520d37bb3d49f8e62e30c80b001e0003b3f3ca9 (patch) | |
tree | decc3a87d59b4eec5ec8c8c9c3f8378c35a29c7b /drivers/usb/host/xhci-hub.c | |
parent | 8dd8d2c95d0252bc64aa8e061a5fb4fbcd05f826 (diff) | |
parent | bb176f67090ca54869fc1262c913aa69d2ede070 (diff) | |
download | linux-stable-0520d37bb3d49f8e62e30c80b001e0003b3f3ca9.tar.gz linux-stable-0520d37bb3d49f8e62e30c80b001e0003b3f3ca9.tar.bz2 linux-stable-0520d37bb3d49f8e62e30c80b001e0003b3f3ca9.zip |
Merge 4.14-rc6 into usb-next
We need the USB fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/xhci-hub.c')
-rw-r--r-- | drivers/usb/host/xhci-hub.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index f070f94a8022..9762333d8d7f 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -420,14 +420,25 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend) GFP_NOWAIT); if (!command) { spin_unlock_irqrestore(&xhci->lock, flags); - xhci_free_command(xhci, cmd); - return -ENOMEM; + ret = -ENOMEM; + goto cmd_cleanup; + } + + ret = xhci_queue_stop_endpoint(xhci, command, slot_id, + i, suspend); + if (ret) { + spin_unlock_irqrestore(&xhci->lock, flags); + xhci_free_command(xhci, command); + goto cmd_cleanup; } - xhci_queue_stop_endpoint(xhci, command, slot_id, i, - suspend); } } - xhci_queue_stop_endpoint(xhci, cmd, slot_id, 0, suspend); + ret = xhci_queue_stop_endpoint(xhci, cmd, slot_id, 0, suspend); + if (ret) { + spin_unlock_irqrestore(&xhci->lock, flags); + goto cmd_cleanup; + } + xhci_ring_cmd_db(xhci); spin_unlock_irqrestore(&xhci->lock, flags); @@ -439,6 +450,8 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend) xhci_warn(xhci, "Timeout while waiting for stop endpoint command\n"); ret = -ETIME; } + +cmd_cleanup: xhci_free_command(xhci, cmd); return ret; } |