сб, 26 янв. 2019 г. в 00:37, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>: > > On Fri, 25 Jan 2019, Bin Liu wrote: > > > On Thu, Jan 24, 2019 at 09:47:02PM +0300, Matwey V. Kornilov wrote: > > > By the way, why do we need to store the qh in urb->hcpriv? > > > qh can always be accessible through urb->ep->hcpriv > > > Wouldn't it be better to drop entire urb->hcpriv usage? > > > > I am not sure why. The code is there since the first commit in a decade > > ago. But I tend to agree with you. > > > > In a quick search for urb->hcpriv and urb->ep->hcpriv, based on the > > usage in core/hcd.c, it seems to me that urb->hcpriv should not be > > changed in each controller driver, but I see both have been used in most > > controller drivers. I will leave this to others to educate me. > > In some of the older HCDs, urb->hcpriv != NULL is used to indicate that > urb is on an endpoint queue. Perhaps that usage was copied. > > Alan Stern > Hi, Thank you for the explanation. I think that It would be great to document it somewhere. Such a purpose for variable named `hcpriv' is not entirely obvious. Now it is clear to me, why __usb_hcd_giveback_urb() sets urb->hcpriv to NULL. Returning to my initial patch. I think that it is still valid, though I admit that the commit message must be rewritten. In this code path we successfully queued the new urb, so urb->hcpriv should be NOT NULL indicating that the urb is queued according to Alan explanation. musb_urb_enqueue(), musb_host.c line 2345: if (ret == 0) { urb->hcpriv = qh; /* FIXME set urb->start_frame for iso/intr, it's tested in * musb_start_urb(), but otherwise only konicawc cares ... */ } -- With best regards, Matwey V. Kornilov