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 > > 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 to make them less annoying? They aren't very important, after all -- they don't indicate that anything has gone seriously wrong. Alan Stern