On Fri, Feb 25, 2011 at 07:41:47PM +0000, Pavol Kurina wrote: > Felipe Balbi <balbi <at> ti.com> writes: > > > > struct usb_request's list_head is supposed to be > > used only by gadget drivers, but musb is abusing > > that. Give struct musb_request its own list_head > > and prevent musb from poking into other driver's > > business. > > Hi, > > I think, the patch misses to fix the usage of > "request->list" in musb_gadget_dequeue in > musb_gadget.c. > > I found out by having troubles with f_mass_storage. > It needs musb_gadget_dequeue to work properly... > > I backported the patch to android-2.6.35 kernel on a > omap4 system and also fixed the musb_gadget_dequeue > there so f_mass_storage seem to work at least there > now... > > Can you check this patch regarding some missing bits > please? Looks like we need some extra tests to be added to g_zero, I tested with g_zero and it didn't find that problem. Anyway, here's a patch which probably fixes what you need to be fixed. Would you test it for me ? diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index da8c93b..bf88a61 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -1274,7 +1274,8 @@ cleanup: static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) { struct musb_ep *musb_ep = to_musb_ep(ep); - struct usb_request *r; + struct musb_request req = to_musb_request(request); + struct musb_request *r; unsigned long flags; int status = 0; struct musb *musb = musb_ep->musb; @@ -1285,10 +1286,10 @@ static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request) spin_lock_irqsave(&musb->lock, flags); list_for_each_entry(r, &musb_ep->req_list, list) { - if (r == request) + if (r == req) break; } - if (r != request) { + if (r != req) { DBG(3, "request %p not queued to %s\n", request, ep->name); status = -EINVAL; goto done; -- balbi -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html