From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lb0-f181.google.com ([209.85.217.181]:34502 "EHLO mail-lb0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753339AbbIALke (ORCPT ); Tue, 1 Sep 2015 07:40:34 -0400 Received: by lbbtg9 with SMTP id tg9so77210981lbb.1 for ; Tue, 01 Sep 2015 04:40:33 -0700 (PDT) Subject: Re: [PATCH] Revert "usb: dwc3: gadget: drop unnecessary loop when cleaning up TRBs" To: ville.syrjala@linux.intel.com, Felipe Balbi References: <1441039708-2504-1-git-send-email-ville.syrjala@linux.intel.com> <55E4A92C.70407@cogentembedded.com> Cc: Greg Kroah-Hartman , linux-usb@vger.kernel.org, stable@vger.kernel.org From: Sergei Shtylyov Message-ID: <55E58EAF.8060502@cogentembedded.com> Date: Tue, 1 Sep 2015 14:40:31 +0300 MIME-Version: 1.0 In-Reply-To: <55E4A92C.70407@cogentembedded.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: On 8/31/2015 10:21 PM, Sergei Shtylyov wrote: >> From: Ville Syrjälä >> >> This reverts commit 8f2c9544aba636134303105ecb164190a39dece4. >> >> As it breaks g_ether on my Baytrail FFRD8 device. Everything starts out >> fine, but after a bit of data has been transferred it just stops >> flowing. >> >> Note that I do get a bunch of these "NOHZ: local_softirq_pending 08" >> when booting the machine, but I'm not really sure if they're related >> to this problem. >> >> Cc: Felipe Balbi >> Cc: Greg Kroah-Hartman >> Cc: linux-usb@vger.kernel.org >> Cc: stable@vger.kernel.org >> Signed-off-by: Ville Syrjälä >> --- >> drivers/usb/dwc3/gadget.c | 37 +++++++++++++++++++++---------------- >> 1 file changed, 21 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c >> index 333a7c0..9a5de54 100644 >> --- a/drivers/usb/dwc3/gadget.c >> +++ b/drivers/usb/dwc3/gadget.c >> @@ -1859,27 +1859,32 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, >> struct dwc3_ep *dep, >> unsigned int i; >> int ret; >> >> - req = next_request(&dep->req_queued); >> - if (!req) { >> - WARN_ON_ONCE(1); >> - return 1; >> - } >> - i = 0; >> do { >> - slot = req->start_slot + i; >> - if ((slot == DWC3_TRB_NUM - 1) && >> + req = next_request(&dep->req_queued); >> + if (!req) { >> + WARN_ON_ONCE(1); >> + return 1; >> + } >> + i = 0; >> + do { >> + slot = req->start_slot + i; >> + if ((slot == DWC3_TRB_NUM - 1) && >> usb_endpoint_xfer_isoc(dep->endpoint.desc)) >> - slot++; >> - slot %= DWC3_TRB_NUM; >> - trb = &dep->trb_pool[slot]; >> + slot++; >> + slot %= DWC3_TRB_NUM; >> + trb = &dep->trb_pool[slot]; >> + >> + ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, >> + event, status); >> + if (ret) >> + break; >> + }while (++i < req->request.num_mapped_sgs); > > Space needed after }. And this *do {} while* loop seems replaceable with > *foor* loop... Sorry, didn't realize it was a revert. :-/ > [...] MBR, Sergei