diff options
author | Felipe Balbi <balbi@ti.com> | 2011-02-28 03:44:50 -0500 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2011-03-01 04:34:55 -0500 |
commit | 4cbbf084436caddeb815534df4ebaa018c970196 (patch) | |
tree | d7c94d931b0ef9109da136a4c44bda603d0d6ecb /drivers/usb | |
parent | d105e74eff7f8197b4d8e104e347ffbc5c3989b8 (diff) |
usb: musb: gadget: fix list_head usage
commit ad1adb89a0d9410345d573b6995a1fa9f9b7c74a
(usb: musb: gadget: do not poke with gadget's list_head)
fixed a bug in musb where it was corrupting the list_head
which is supposed to be used by gadget drivers. While
doing that, I forgot to fix the usage in musb_gadget_dequeue()
method. Fix that.
Reported-by: Pavol Kurina <pavol.kurina@emsys.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/musb/musb_gadget.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index da8c93bfb6f..2a3aee4e108 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
@@ -1274,7 +1274,8 @@ cleanup: | |||
1274 | static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) | 1274 | static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) |
1275 | { | 1275 | { |
1276 | struct musb_ep *musb_ep = to_musb_ep(ep); | 1276 | struct musb_ep *musb_ep = to_musb_ep(ep); |
1277 | struct usb_request *r; | 1277 | struct musb_request *req = to_musb_request(request); |
1278 | struct musb_request *r; | ||
1278 | unsigned long flags; | 1279 | unsigned long flags; |
1279 | int status = 0; | 1280 | int status = 0; |
1280 | struct musb *musb = musb_ep->musb; | 1281 | struct musb *musb = musb_ep->musb; |
@@ -1285,10 +1286,10 @@ static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) | |||
1285 | spin_lock_irqsave(&musb->lock, flags); | 1286 | spin_lock_irqsave(&musb->lock, flags); |
1286 | 1287 | ||
1287 | list_for_each_entry(r, &musb_ep->req_list, list) { | 1288 | list_for_each_entry(r, &musb_ep->req_list, list) { |
1288 | if (r == request) | 1289 | if (r == req) |
1289 | break; | 1290 | break; |
1290 | } | 1291 | } |
1291 | if (r != request) { | 1292 | if (r != req) { |
1292 | DBG(3, "request %p not queued to %s\n", request, ep->name); | 1293 | DBG(3, "request %p not queued to %s\n", request, ep->name); |
1293 | status = -EINVAL; | 1294 | status = -EINVAL; |
1294 | goto done; | 1295 | goto done; |