On Mon, Jan 22, 2024 at 01:32:39AM +0000, yuanlinyu 00030184 wrote: > > From: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > > Sent: Saturday, January 20, 2024 11:00 PM > > To: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx> > > Cc: yuanlinyu 00030184 <yuanlinyu@xxxxxxxxxxx>; Greg Kroah-Hartman > > <gregkh@xxxxxxxxxxxxxxxxxxx>; linux-usb@xxxxxxxxxxxxxxx > > Subject: Re: [RFC PATCH] usb: udc: run disconnect callback before pull up zero > > > > On Sat, Jan 20, 2024 at 01:12:04AM +0000, Thinh Nguyen wrote: > > > On Fri, Jan 19, 2024, Alan Stern wrote: > > > > On Fri, Jan 19, 2024 at 01:48:13PM +0800, yuan linyu wrote: > > > > > When write UDC to empty and unbind gadget driver from gadget device, it > > is > > > > > possible that there are many queue failures for mass storage function. > > > > > > That's expected right? > > > > Certainly. And not just for mass storage; for other gadget drivers too. > > > > > > > The root cause is on platform like dwc3, if pull down called first, the > > > > > queue operation from mass storage main thread will fail as it is belong to > > > > > another thread context and always try to receive a command from host. > > > > > > > > > > In order to fix it, call gadget driver disconnect callback first, mass > > > > > storage function driver will disable endpoints and clear running flag, > > > > > so there will be no request queue to UDC. > > > > > > > > > > One note is when call disconnect callback first, it mean function will > > > > > disable endpoints before stop UDC controller. > > > > > > > > Exactly. So instead of getting a bunch of errors on the gadget, now > > > > you'll get a bunch of errors on the host. I don't think that's any > > What is host error ? If the host is trying to communicate with the gadget at the time of the mode switch, it will see that something is wrong because the gadget will still be connected (the pullup will still be on) but it won't reply to any USB packets. > Seem when host do nothing, but mass storage driver try to queue request > which want to receive command from host. That's true. If the host is not trying to communicate with the gadget, it won't get any errors. > > > > better. > > > > > > > > Why don't you change the dwc3 driver instead? If it allowed ep_queue > > > > operations to succeed while the pull-up is off then this problem would > > > > go away. > > > > > > > > > > I don't think we should do that either. When pullup off occurs, the > > > device is disconnected for dwc3. usb_ep_queue() doc noted that we > > > should return error on disconnection. > > > > Oh yes, so it does. Okay, forget that idea. > > > > > Beside, it will add unnecessary > > > complication to dwc3 handling this. > > > > How about instead just reducing the visibility of these error messages > > It is already change to dev_dbg() by Wesley Cheng for dwc3. > But it also can enable by change log level. Only delete it will not show again. I think it's good to have those messages show up when the log level is set to debug. They let developers know what's happening when they test changes to the gadget drivers. If the messages really bother somebody, all they have to do is reduce the log level to info. If you're still concerned about the behavior of the mass-storage function, you could change it. Make it disable itself whenever it gets a -ESHUTDOWN error, either while submitting a request or as a completion status. This should reduce the number of error messages, although it won't eliminate them. (Of course, this still leaves the possibility of floods of debugging messages from all the other function drivers...) > this thread just want to discuss if disable eps first then pull up zero acceptable or > good (reduce mode switch time ???) for all UDCs ? I think it's not a good thing to do. And I don't think it will reduce the mode switch time, because both operations still have to occur so they will require the same total amount of time. Alan Stern