From patchwork Fri Jun 28 18:24:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 168125 Delivered-To: patches@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp4020686ilk; Fri, 28 Jun 2019 11:24:26 -0700 (PDT) X-Received: by 2002:a17:902:b608:: with SMTP id b8mr13390113pls.303.1561746266295; Fri, 28 Jun 2019 11:24:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561746266; cv=none; d=google.com; s=arc-20160816; b=dIsJeUCyHVE/BgDcZxJL2UPU5uDdl/5OGSbCC0LgW2kL0CArHOoButRsV9XVOp4pdK xXUtyEm0znSveAnPR0U4Q1GYvMuT+zBugFY7egHglsjtm0nVljVGeq2QYeqfVBdS4VnW 1fUeqPMPNpP/pu7Ke6IfbjRCiVHBK5HrXH426oSgnIKDDK/RSZNWlcw1yfp5bjcpeNmo jm7qT0xaMOozHf060zv20qUjzTVrCtk4JyxzU1Sgg0co2l9q0e0Yz0xykzS2rjj9z1Fn 22/hLJqlScUf+yCSMAbg4awtfnglR/a/VpklaPr3F9YaCH8IwbpjVuFCFV7Z/Cs99UHe 8fkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lT3fxv5LATFR+LwgNYhFFmzfdH8/UFjXtWib2WTIrbM=; b=oVLNZTaHDQsN8hcWW+MxEolR1AJTfAPR1gWAoQkXne7yEJQFVuvxqKFxnTeh36Gc5k yiQbCGU/x8dMoOfiPw50Mw5L4udxT8oBWJNiSZa6/WKG1sEQiExDKBNXLvZOBFrBVfwB Rm0Sl7aGHpNnuG9JyqID/7S7Igbvd148enEgEjPEZ294snacOrNDFT4XINYTv04Mq+fn 7+Enmk95xZTMM9w2I6ZjRoyttfH92yRtk+KnUl7hiOuzFBxYrBAY4jzshWDHn3knDVHy 4p5fnRZe+kIJ4nvvTvGr45Y0QhZF8ptmcH79HfTX0CkGC6FZdO0BPr3N4gpEkV9DUUSh JmRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NSJevXZY; spf=pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id z2sor3447198pjn.1.2019.06.28.11.24.26 for (Google Transport Security); Fri, 28 Jun 2019 11:24:26 -0700 (PDT) Received-SPF: pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NSJevXZY; spf=pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lT3fxv5LATFR+LwgNYhFFmzfdH8/UFjXtWib2WTIrbM=; b=NSJevXZYgKbgf3gTOSY6ABPd6HIDrATAwaVAkJtHmyEV+e1XC44yrZTYnWrwylUFk6 vjzp/7EFBH8eQF7ClX1CCZG5sZq3ssBVu2XmAqafeeVifGN7hJ105CaRnuTf2P2tvw8H xeBaE0EnK0n1OZYWH6JB3NNg0V5tw2/cNNt3ry5kEo80Gdh7xA7bKCQn52WITt0KIN7J J6qXD1je1YFbfeATZU5suXDkrPwsOud2ZQFmluHjfzS3PjT36LETox1fcI2adhcUg6S7 2iFyUdgUwEKMoM4+lypKEa/fynWRv3vRD2Cqk8leOXknbx92ap/uFbIHwtNe/STBBBDi yRow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lT3fxv5LATFR+LwgNYhFFmzfdH8/UFjXtWib2WTIrbM=; b=ZN062XSfMuYYUkQfIQyeDA09XEGGoyIe6YqME2taoU2o3PkXNmb0nAUGlHRSDUU/g9 AObgD3GZWGdPTH2r198gZnLDG8u61x2NPSbrRRxScDXCehXV6EwzwohkWPdS2/30daUQ coOqUtA5y3zuo0IiK/TL5a66QK0qw9oyGHt/4KHD3q7QRwBC6kL/56rsdMaO4UQG3WUt 7pslnc+HR2N8N5H9tlEjN85Q4pvG+IOdqFmWhgZSpIMGoevh/wamua4BLmV7QrZn83LH AgmmVAEZzviUI/e6/mdkIJq9vNOTs9HCXHD00PHPusQPRhJ72c3JYActWOurRVcjaGcV PfDg== X-Gm-Message-State: APjAAAVTD2qCVxpRQ3dyXTgGmzPjrE3J9jIW1rNufyFDsqxeGVlZE/l1 4SDTyujJzJd70Wa2/Tw3K2so/TP2 X-Google-Smtp-Source: APXvYqxFBgbJKazoH14+J2IhpQeuPNTxNOQwuSXCkvYIBIZNSudfMZQPcQIomrsNlyGq7MiTx2OEYQ== X-Received: by 2002:a17:90a:ad86:: with SMTP id s6mr14952881pjq.42.1561746265909; Fri, 28 Jun 2019 11:24:25 -0700 (PDT) Return-Path: Received: from localhost.localdomain ([2601:1c2:680:1319:692:26ff:feda:3a81]) by smtp.gmail.com with ESMTPSA id s15sm2916223pfd.183.2019.06.28.11.24.24 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 28 Jun 2019 11:24:25 -0700 (PDT) From: John Stultz To: stable@vger.kernel.org Cc: Felipe Balbi , Fei Yang , Sam Protsenko , Felipe Balbi , linux-usb@vger.kernel.org, John Stultz Subject: [PATCH 4.19.y v2 5/9] usb: dwc3: gadget: extract dwc3_gadget_ep_skip_trbs() Date: Fri, 28 Jun 2019 18:24:09 +0000 Message-Id: <20190628182413.33225-6-john.stultz@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190628182413.33225-1-john.stultz@linaro.org> References: <20190628182413.33225-1-john.stultz@linaro.org> From: Felipe Balbi commit 7746a8dfb3f9c91b3a0b63a1d5c2664410e6498d upstream Extract the logic for skipping over TRBs to its own function. This makes the code slightly more readable and makes it easier to move this call to its final resting place as a following patch. Cc: Fei Yang Cc: Sam Protsenko Cc: Felipe Balbi Cc: linux-usb@vger.kernel.org Cc: stable@vger.kernel.org # 4.19.y Signed-off-by: Felipe Balbi (cherry picked from commit 7746a8dfb3f9c91b3a0b63a1d5c2664410e6498d) Signed-off-by: John Stultz --- drivers/usb/dwc3/gadget.c | 61 +++++++++++++++------------------------ 1 file changed, 24 insertions(+), 37 deletions(-) -- 2.17.1 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 4e08904890ed..46aa20b376cd 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1341,6 +1341,29 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, return ret; } +static void dwc3_gadget_ep_skip_trbs(struct dwc3_ep *dep, struct dwc3_request *req) +{ + int i; + + /* + * If request was already started, this means we had to + * stop the transfer. With that we also need to ignore + * all TRBs used by the request, however TRBs can only + * be modified after completion of END_TRANSFER + * command. So what we do here is that we wait for + * END_TRANSFER completion and only after that, we jump + * over TRBs by clearing HWO and incrementing dequeue + * pointer. + */ + for (i = 0; i < req->num_trbs; i++) { + struct dwc3_trb *trb; + + trb = req->trb + i; + trb->ctrl &= ~DWC3_TRB_CTRL_HWO; + dwc3_ep_inc_deq(dep); + } +} + static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, struct usb_request *request) { @@ -1368,38 +1391,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, break; } if (r == req) { - int i; - /* wait until it is processed */ dwc3_stop_active_transfer(dep, true); - - /* - * If request was already started, this means we had to - * stop the transfer. With that we also need to ignore - * all TRBs used by the request, however TRBs can only - * be modified after completion of END_TRANSFER - * command. So what we do here is that we wait for - * END_TRANSFER completion and only after that, we jump - * over TRBs by clearing HWO and incrementing dequeue - * pointer. - * - * Note that we have 2 possible types of transfers here: - * - * i) Linear buffer request - * ii) SG-list based request - * - * SG-list based requests will have r->num_pending_sgs - * set to a valid number (> 0). Linear requests, - * normally use a single TRB. - * - * For each of these two cases, if r->unaligned flag is - * set, one extra TRB has been used to align transfer - * size to wMaxPacketSize. - * - * All of these cases need to be taken into - * consideration so we don't mess up our TRB ring - * pointers. - */ wait_event_lock_irq(dep->wait_end_transfer, !(dep->flags & DWC3_EP_END_TRANSFER_PENDING), dwc->lock); @@ -1407,13 +1400,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, if (!r->trb) goto out0; - for (i = 0; i < r->num_trbs; i++) { - struct dwc3_trb *trb; - - trb = r->trb + i; - trb->ctrl &= ~DWC3_TRB_CTRL_HWO; - dwc3_ep_inc_deq(dep); - } + dwc3_gadget_ep_skip_trbs(dep, r); goto out1; } dev_err(dwc->dev, "request %pK was not queued to %s\n",