Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp8985647ybi; Tue, 23 Jul 2019 19:30:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqy9AQsloZQ0OU+mb+TbH7mxqx+rDe8elPMCZ7oq2CNSAV7sVXfVGUscEWEd6Sv5KepjgMRu X-Received: by 2002:a63:b919:: with SMTP id z25mr78528554pge.201.1563935407056; Tue, 23 Jul 2019 19:30:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563935407; cv=none; d=google.com; s=arc-20160816; b=IXB3aCsjpXLdPduIofR1YSTPoCmWYWpa9tVAi60z5/Z8BTLakHnoJVSy2A3dSDEWkr YVGj4OMirxAOF9edPOkfq9Oo8QWt6lvZpQWeYX8L59xsygbjBwltwaXxeFwSFFc5PYRn rlPdCElauvSTwhZMUGQoEo2VdHdVBhTCBIC3XpAYMXwyT2Z5Lny8fEPhwNeycypyPGy9 4NFpzD+MxCzZ8tCSwQKA/5n+e7PMeIhNqHZHc0MzF08Tee/hhph392no5XmehOTDXhgr aCn11KBII27j9G4idg2i/t6mu2zDaYtLTb3gPtPNiudwNzTp77Ed8JS28sEq+m+ea/eG 99vA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=WOfhFeRwrk1NDQAubrKcIwqzw+J4sPXSqFL3j8L4jQk=; b=GEVZ2nY4/GlQ6PUikJG3J2es+EvwlPgqWx/2267gjabIfKeofe4cf6T5IHUNjprDeD DpyIjB9ogyqPEwNuvpnJTJAyt8LxOjPLv1OTqHwUuAMElQYw3wQeSepAbhSOR+5yLj01 DkslcDilRcKAL/0HW3ZhEjkNAMJNbJzgMtEWJmHQGdovNWXAdfPxhuI/LpZIGOuHXnYz VtwBlW6iRKWTu/qaoqEQZCKZTNss6fg9+ahiuPD0PCEjQNuKGgXz/+Lz5sHFyJ02913D Ezhdr9wQebw8EQEPd/MjmYfG5Ays/6NYUYZglu5GJrLPE+gmy47xuy3ZFPxCsgaCwkrF TnZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=JezetA0N; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q31si12136433pjc.33.2019.07.23.19.29.51; Tue, 23 Jul 2019 19:30:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=JezetA0N; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730046AbfGWU1o (ORCPT + 99 others); Tue, 23 Jul 2019 16:27:44 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:33731 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728389AbfGWU1o (ORCPT ); Tue, 23 Jul 2019 16:27:44 -0400 Received: by mail-pf1-f196.google.com with SMTP id g2so19708394pfq.0 for ; Tue, 23 Jul 2019 13:27:44 -0700 (PDT) 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=WOfhFeRwrk1NDQAubrKcIwqzw+J4sPXSqFL3j8L4jQk=; b=JezetA0Nxiw1OmCAW2DXcbq3AmvNuAKkd8EZaqtaZE02yn5PvkQjeWHGm89Hdz/5x0 ZL73gKx15WWh+UArNMwog4UBdRwhmA8Aays93Bv5o44Kj6UuElrGHFE0oqlQ6L7Lu2kJ 0jDtfZU+Wr3MXAV4msLIdr/sT1MbA82oTkWRSPhySp0tLXs+dR9/YHF/3UQOUU/Y3OJp FrOqsBBL9FByy1fTW5o4xilcETT+or2inIAtjcbVo+EjXq7WpE9JQMUUBkFJ9aiw4fyv DgxZdF2eLiLg8U5C9f4yWFJ8D1QS4s4Nb9UfauWvP+esjMgTbNPzSAx6zFw3Fr8GkPco fmBA== 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=WOfhFeRwrk1NDQAubrKcIwqzw+J4sPXSqFL3j8L4jQk=; b=JM556paFrdi7FGonbxoqEJIkXNfmndscqIJ5rY5jqFasGyEwv/x5XzWq24brpR0rvE EoLnP6q73t2Ja+H8hsg6SgSswkyu0zYviRHjWLQG42qk+2L9KWPrgC7GQXJJDYkoman1 ULD3mtnwvi3QKiPpW2dGUjqiiYzn3z3fwISDmBmyihS+qWZgvZ2OSjUKjP04yXm0Hqz4 pKJK9EKzU1jPh/czjRLwGC3R38/ThSXA7WTG60LxsQ9pNLf3KYWGHkOdLQakl/1BVhU2 t8LduVVVC3sYmpJbu3rtHwJwvFeJD3pmcUX3Xu0t4WyhaqCobDaRaGdrUPrTF6zFX7Hj KATQ== X-Gm-Message-State: APjAAAUOQ20jD1RN1YWpKNkiU8wg5LrGJH0VAVRgty3U1Dssk5eja9GA /KjSSrIO7fCTXxLP+Pnrhbea/gDa96I= X-Received: by 2002:a17:90a:109:: with SMTP id b9mr79845273pjb.112.1563913663333; Tue, 23 Jul 2019 13:27:43 -0700 (PDT) Received: from localhost.localdomain ([2601:1c2:680:1319:692:26ff:feda:3a81]) by smtp.gmail.com with ESMTPSA id r2sm59205538pfl.67.2019.07.23.13.27.41 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 23 Jul 2019 13:27:42 -0700 (PDT) From: John Stultz To: linux-kernel@vger.kernel.org Cc: Anurag Kumar Vulisha , Felipe Balbi , Fei Yang , Thinh Nguyen , Tejas Joglekar , Andrzej Pietrasiewicz , Greg KH , Linux USB List , stable , John Stultz Subject: [PATCH] usb: dwc3: Check for IOC/LST bit in both event->status and TRB->ctrl fields Date: Tue, 23 Jul 2019 20:27:35 +0000 Message-Id: <20190723202735.113381-1-john.stultz@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Anurag Kumar Vulisha The present code in dwc3_gadget_ep_reclaim_completed_trb() will check for IOC/LST bit in the event->status and returns if IOC/LST bit is set. This logic doesn't work if multiple TRBs are queued per request and the IOC/LST bit is set on the last TRB of that request. Consider an example where a queued request has multiple queued TRBs and IOC/LST bit is set only for the last TRB. In this case, the Core generates XferComplete/XferInProgress events only for the last TRB (since IOC/LST are set only for the last TRB). As per the logic in dwc3_gadget_ep_reclaim_completed_trb() event->status is checked for IOC/LST bit and returns on the first TRB. This makes the remaining TRBs left unhandled. To aviod this, changed the code to check for IOC/LST bits in both event->status & TRB->ctrl. This patch does the same. At a practical level, this patch resolves USB transfer stalls seen with adb on dwc3 based Android devices after functionfs gadget added scatter-gather support around v4.20. Cc: Felipe Balbi Cc: Fei Yang Cc: Thinh Nguyen Cc: Tejas Joglekar Cc: Andrzej Pietrasiewicz Cc: Greg KH Cc: Linux USB List Cc: stable Tested-By: Tejas Joglekar Reviewed-by: Thinh Nguyen Signed-off-by: Anurag Kumar Vulisha [jstultz: forward ported to mainline, added note to commit log] Signed-off-by: John Stultz --- Just wanted to send this out so we're all looking at the same thing. Not sure if its correct, but it seems to solve the adb stalls I've been seeing for awhile. thanks -john drivers/usb/dwc3/gadget.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index c9cecb3a9670..1d9701dde69b 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2394,7 +2394,12 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep, if (event->status & DEPEVT_STATUS_SHORT && !chain) return 1; - if (event->status & DEPEVT_STATUS_IOC) + if ((event->status & DEPEVT_STATUS_IOC) && + (trb->ctrl & DWC3_TRB_CTRL_IOC)) + return 1; + + if ((event->status & DEPEVT_STATUS_LST) && + (trb->ctrl & DWC3_TRB_CTRL_LST)) return 1; return 0; -- 2.17.1