diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2013-10-16 04:05:53 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2013-10-16 04:05:53 -0400 |
commit | 263c43a4479ecce52c0fdc84b4620e146263d549 (patch) | |
tree | b29ad7d94892be7a40524400481f71a1c075a167 /drivers/usb/host/ehci-q.c | |
parent | 873ee9ed2c020b59e22a5082f73fc2960ec959bf (diff) | |
parent | d0e639c9e06d44e713170031fe05fb60ebe680af (diff) |
Merge tag 'v3.12-rc4' into devel
Linux 3.12-rc4
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 ( | |||
247 | 247 | ||
248 | static void | 248 | static void |
249 | ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status) | 249 | ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status) |
250 | __releases(ehci->lock) | ||
251 | __acquires(ehci->lock) | ||
250 | { | 252 | { |
251 | if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) { | 253 | if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) { |
252 | /* ... update hc-wide periodic stats */ | 254 | /* ... update hc-wide periodic stats */ |
@@ -272,8 +274,11 @@ ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status) | |||
272 | urb->actual_length, urb->transfer_buffer_length); | 274 | urb->actual_length, urb->transfer_buffer_length); |
273 | #endif | 275 | #endif |
274 | 276 | ||
277 | /* complete() can reenter this HCD */ | ||
275 | usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); | 278 | usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); |
279 | spin_unlock (&ehci->lock); | ||
276 | usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status); | 280 | usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status); |
281 | spin_lock (&ehci->lock); | ||
277 | } | 282 | } |
278 | 283 | ||
279 | static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh); | 284 | static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh); |