Hi, On Thu, May 01, 2014 at 02:36:08AM -0400, Zhuang Jin Can wrote: > At least we should giveback the current request to the > gadget. Otherwise, the gadget will be stuck without knowing > anything. > > It was oberved that the failure can happen if the request is > queued when the run/stop bit of controller is not set. why is your gadget queueing any requests before calling ->udc_start() ? A better question, what modification have you done to udc-core.c which broke this ? udc-core *always* calls ->udc_start() by the time you load a gadget driver so this case will *never* happen. Whatever modification you did, broke this assumption and I will *not* accept this patch because the bug is elsewhere and *not* in mainline kernel. > Signed-off-by: Zhuang Jin Can <jin.can.zhuang@xxxxxxxxx> > --- > drivers/usb/dwc3/gadget.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index 70715ee..8d0c3c7 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -1000,9 +1000,7 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param, > * here and stop, unmap, free and del each of the linked > * requests instead of what we do now. > */ > - usb_gadget_unmap_request(&dwc->gadget, &req->request, > - req->direction); > - list_del(&req->list); > + dwc3_gadget_giveback(dep, req, -ESHUTDOWN); > return ret; > } > > -- > 1.7.9.5 > -- balbi
Attachment:
signature.asc
Description: Digital signature