Re: [PATCH 2/2] usb: dwc3: ep0: don't change to configured state too early

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, Jul 22, 2013 at 10:55:28AM -0400, Alan Stern wrote:
> On Mon, 22 Jul 2013, Felipe Balbi wrote:
> 
> > before changing to configured state, we need
> > to wait until gadget driver has had a chance
> > to process the request.
> > 
> > In case of USB_GADGET_DELAYED_STATUS, that means
> > we need to defer usb_gadget_set_state() until
> > the upcoming usb_ep_queue().
> > 
> > Reported-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Felipe Balbi <balbi@xxxxxx>
> > ---
> >  drivers/usb/dwc3/ep0.c | 13 +++++++++++--
> >  1 file changed, 11 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
> > index 007651c..7fa93f4 100644
> > --- a/drivers/usb/dwc3/ep0.c
> > +++ b/drivers/usb/dwc3/ep0.c
> > @@ -148,6 +148,7 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
> >  
> >  		direction = !dwc->ep0_expect_in;
> >  		dwc->delayed_status = false;
> > +		usb_gadget_set_state(&dwc->gadget, USB_STATE_CONFIGURED);
> 
> Isn't this overkill?  Do you really want to call usb_gadget_set_state() 
> every time the gadget driver queues a transfer on ep0?
> 
> Or am I missing an important part of the context?

heh, you're missing context, that will only be called when we had
delayed status flag set:

| static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
| 		struct dwc3_request *req)
| {

[ ... ]

| 	/*
| 	 * In case gadget driver asked us to delay the STATUS phase,
| 	 * handle it here.
| 	 */
| 	if (dwc->delayed_status) {
| 		unsigned	direction;
| 
| 		direction = !dwc->ep0_expect_in;
| 		dwc->delayed_status = false;
| 		usb_gadget_set_state(&dwc->gadget, USB_STATE_CONFIGURED);
| 
| 		if (dwc->ep0state == EP0_STATUS_PHASE)
| 			__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
| 		else
| 			dev_dbg(dwc->dev, "too early for delayed status\n");
| 
| 		return 0;
| 	}

[ ... ]

| 	return 0;
| }

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux