Message ID | 1545339230-10520-1-git-send-email-prime.zeng@hisilicon.com |
---|---|
State | New |
Headers | show |
Series | usb: dwc3: gadget: don't remove the request if bus-expired | expand |
Hi, Zeng Tao <prime.zeng@hisilicon.com> writes: > We have already returned EAGAIN for bus-expiry, and it's designed to > start with a future Frame number and start the transfer again. So we > should not remove the request for that case. > > Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com> Do we need a Fixes tag here? How about Cc stable? Can you share tracepoints exposing the problem? thanks -- balbi
Hi balbi: >-----Original Message----- >From: Felipe Balbi [mailto:felipe.balbi@linux.intel.com] >Sent: Monday, January 14, 2019 4:13 PM >To: Zengtao (B) <prime.zeng@hisilicon.com> >Cc: Zengtao (B) <prime.zeng@hisilicon.com>; Greg Kroah-Hartman ><gregkh@linuxfoundation.org>; linux-usb@vger.kernel.org; >linux-kernel@vger.kernel.org >Subject: Re: [PATCH] usb: dwc3: gadget: don't remove the request if >bus-expired > >* PGP Signed by an unknown key > > >Hi, > >Zeng Tao <prime.zeng@hisilicon.com> writes: >> We have already returned EAGAIN for bus-expiry, and it's designed to >> start with a future Frame number and start the transfer again. So we >> should not remove the request for that case. >> >> Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com> > >Do we need a Fixes tag here? How about Cc stable? Can you share >tracepoints exposing the problem? > I am not sure that we need to Fixes tag, it's not related to any single patch, but there is definitely something wrong, after rethinking it again, I found that there are still some problems for this patch, for the reties inside the driver, we should not remove the request, but if we return -EAGAIN to the gadget layer, we should because the gadget will requeue the request again if we return -EAGAIN. Any suggestions. > >thanks > >-- >balbi > >* Unknown Key >* 0xE11A9906
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 2ecde30..16a6e3c 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1250,7 +1250,7 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep) } ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); - if (ret < 0) { + if (ret < 0 && ret != -EAGAIN) { /* * FIXME we need to iterate over the list of requests * here and stop, unmap, free and del each of the linked @@ -1259,10 +1259,9 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep) if (req->trb) memset(req->trb, 0, sizeof(struct dwc3_trb)); dwc3_gadget_del_and_unmap_request(dep, req, ret); - return ret; } - return 0; + return ret; } static int __dwc3_gadget_get_frame(struct dwc3 *dwc)
We have already returned EAGAIN for bus-expiry, and it's designed to start with a future Frame number and start the transfer again. So we should not remove the request for that case. Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com> --- drivers/usb/dwc3/gadget.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) -- 2.7.4