path: root/drivers/usb/host/ehci-q.c
diff options
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-12 13:58:42 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-17 09:36:10 -0700
commit3b8d7321ed4b8511e17048303b806ffcc2806077 (patch)
tree00d57cafded10beb0874dc0e665b58c5be2f480c /drivers/usb/host/ehci-q.c
parent272b98c6455f00884f0350f775c5342358ebb73f (diff)
Revert "USB: EHCI: support running URB giveback in tasklet context"
This reverts commit 428aac8a81058e2303677a8fbf26670229e51d3a. This isn't quite ready for 3.12, we need some more EHCI driver changes that are just now showing up. So revert this for now, and queue it up later for 3.13. Reported-by: Alan Stern <stern@rowland.harvard.edu> Cc: Ming Lei <ming.lei@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ehci-q.c')
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
index e321804c3475..a7f776a13eb1 100644
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -247,6 +247,8 @@ static int qtd_copy_status (
static void
ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status)
if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
/* ... update hc-wide periodic stats */
@@ -272,8 +274,11 @@ ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status)
urb->actual_length, urb->transfer_buffer_length);
+ /* complete() can reenter this HCD */
usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb);
+ spin_unlock (&ehci->lock);
usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status);
+ spin_lock (&ehci->lock);
static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh);