summaryrefslogtreecommitdiff
path: root/drivers/usb/host/ehci-q.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-10-03 17:29:05 +0100
committerMark Brown <broonie@linaro.org>2013-10-03 17:29:05 +0100
commit8e9c4aa4e7bd600d30e15ec82be9b670a1ec3da9 (patch)
tree3b19eb54c684e36feab568078018dea31c43a79f /drivers/usb/host/ehci-q.c
parentd60336e2f136287de821901d4a1b56179a0f7b69 (diff)
parent1d73ad298d1bfeee5d77c19e5cd667c551e30632 (diff)
Merge remote-tracking branch 'asoc/fix/fsl' into asoc-fsl
Conflicts: sound/soc/fsl/fsl_ssi.c
Diffstat (limited to 'drivers/usb/host/ehci-q.c')
-rw-r--r--drivers/usb/host/ehci-q.c5
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)
+__releases(ehci->lock)
+__acquires(ehci->lock)
{
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);
#endif
+ /* 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);