diff options
| author | Mark Brown <broonie@linaro.org> | 2013-10-03 17:29:05 +0100 |
|---|---|---|
| committer | Mark Brown <broonie@linaro.org> | 2013-10-03 17:29:05 +0100 |
| commit | 8e9c4aa4e7bd600d30e15ec82be9b670a1ec3da9 (patch) | |
| tree | 3b19eb54c684e36feab568078018dea31c43a79f /drivers/usb/host/ehci-q.c | |
| parent | d60336e2f136287de821901d4a1b56179a0f7b69 (diff) | |
| parent | 1d73ad298d1bfeee5d77c19e5cd667c551e30632 (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.c | 5 |
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); |
