Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp3218537pxt; Mon, 9 Aug 2021 21:00:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzLge2j5ZOZyVsJkCLzgNczBy1Ndin/jIuhznebxdB4DfkonUu1SknevOoEDzRxqR7ud749 X-Received: by 2002:a02:8807:: with SMTP id r7mr20373930jai.35.1628568049584; Mon, 09 Aug 2021 21:00:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628568049; cv=none; d=google.com; s=arc-20160816; b=Ptrp4rR/n3Cux9f2tyfoRuICf+8w5OCppw1kkuVNIYTIO6i1S3ETAsFLeXbEg8uGPW X7JOMQDnBFKl2PpiXwmskwAB1MvdO8/ujzKG9mCjLjjViRXJvH306wB9lCI220s/FTrO Sap4aqvwoq2NKmA/3bzY/po1s3+stKlPLONwS0YHE2LD+blQ0JaK3nhFaQPTGFgA2NMw Z+x7/06QftctnMd6S7fs+DkpgG87MceOaJlw7X7KD0klpK+XBxjoBqTfoZgQuLJSf8Z5 L7G562v7vqrGMgHkjW3kuw/UOyt2DMnEqrELCxHdKbI54oF65FzVliQpL4G8iU3ZUYjN Hm5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=NzjcRfEcACJvgTVpHXjAyUs8UkB1tiZkWLbrVQy12/Q=; b=HWbhGPN5K5t9RrW0g6OTrAjZCQSkTwSsMqwhXZ7LLNMGz5Df5FMpeAzO2n0sAXOkLp i9Gwfl9s0ipz5misPDSACgOqwjBDeiVhppa9Pj7poSNTZ0qU5hsnOGTaaE6Bxn3wykFs hO3aJhP1C4xhF+/sFBG/Nt/Rb2tB+rKHc1iVROVHtq6HGx8USQ5p6CSROkvTn2zyRRQu q8Wt+oL8IuB36fj0787Re2LMyhK9AmQ1nfH6UskV2mtlICoSbbMJnY0S31GhgwkkbR6F 0Jka6tOUMgTl9cTmpI8gwokK3mxnwoJIfzKb7GVKx2Yejvr9iYC4cdYR2leWTr0C3w7u O3CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=lCeiJTQk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id b2si15439406ilq.11.2021.08.09.21.00.30; Mon, 09 Aug 2021 21:00:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=lCeiJTQk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S236737AbhHIWc1 (ORCPT + 99 others); Mon, 9 Aug 2021 18:32:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235444AbhHIWc0 (ORCPT ); Mon, 9 Aug 2021 18:32:26 -0400 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E1BD7C0613D3 for ; Mon, 9 Aug 2021 15:32:05 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id fa24-20020a17090af0d8b0290178bfa69d97so2380703pjb.0 for ; Mon, 09 Aug 2021 15:32:05 -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 :mime-version:content-transfer-encoding; bh=NzjcRfEcACJvgTVpHXjAyUs8UkB1tiZkWLbrVQy12/Q=; b=lCeiJTQknowjGfNbQ7NgspnLemPOUVn1UFwleOgZ4LEWrQA4rxLT/TgvxY+b09YLAM 8W2JTMDxAPXYwsa3HMlpXlo7bLCBE1FIJt4oScW8PSWY4IbA+tkRBuCIjWKKGE30HnzV 5IL8ctqS7sgFHbHCXKBk/BtnYPBMbsLzMn9i5LKFzM+Q7mKl1fqYndx8Ayadu+zZEa0T zGzo2QrVXImVJPKmVB4nu5xYF+YV0OrMzbbP20/sPybAf9HXogBSvpHKIjakVElD8cd0 eFFCg3qK2R89ox8dNg66yyRp6ikD5OQPfD7nUa8y8sSAEZNSNoTJluZFeNYS4+4CwixC exmA== 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:mime-version:content-transfer-encoding; bh=NzjcRfEcACJvgTVpHXjAyUs8UkB1tiZkWLbrVQy12/Q=; b=PDy2XKzvPj4JNxKTs9chL0UmnERjKq0/D4NtKldpGtCqMjUA0ZLb2K5u6KwEe6XFQy IposwOEpSTMV45mzTq1aR6zMf4R2ZY9PBld2M18kmFxAiUDJ42rJoo+irLlFqtxZd0YQ URgqQ+JlzrBmtHC+4Wsx4QQ2x6yvcGq4M84yeg7F7AfLzBHVzRRqHrfRQTNvJIvHJPMO DbEaEj4VyEsdjjgwU1UfKIVsCAz3ZCeVsB2i08l0LNUHTuWkmVwCMiN2oMcT1FBoyI5P SVPfDj4lyfi8ylk8cEqS9bJinxmmI9KIfZZdCpBYfP9wET/cC8JgqjKJcomOWBG87v+q QVNg== X-Gm-Message-State: AOAM532VD2NXWKONcxkpOCDM3TFgA0FIRwxq9uscO5A1SvsJdMPCgAgD Zmr6QVWiXgjEiEji3KeGW+hF5GJgpKx/vQ== X-Received: by 2002:a05:6a00:c81:b029:30e:21bf:4c15 with SMTP id a1-20020a056a000c81b029030e21bf4c15mr26160813pfv.70.1628548325071; Mon, 09 Aug 2021 15:32:05 -0700 (PDT) Received: from localhost.localdomain ([2601:1c2:680:1319:692:26ff:feda:3a81]) by smtp.gmail.com with ESMTPSA id x26sm21276226pfm.77.2021.08.09.15.32.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 15:32:04 -0700 (PDT) From: John Stultz To: lkml Cc: John Stultz , Wesley Cheng , Felipe Balbi , Greg Kroah-Hartman , Alan Stern , Jack Pham , Thinh Nguyen , Todd Kjos , Amit Pundir , YongQin Liu , Sumit Semwal , Petri Gynther , linux-usb@vger.kernel.org Subject: [RFC][PATCH] dwc3: gadget: Fix losing list items in dwc3_gadget_ep_cleanup_completed_requests() Date: Mon, 9 Aug 2021 22:31:59 +0000 Message-Id: <20210809223159.2342385-1-john.stultz@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In commit d25d85061bd8 ("usb: dwc3: gadget: Use list_replace_init() before traversing lists"), a local list_head was introduced to process the started_list items to avoid races. However, in dwc3_gadget_ep_cleanup_completed_requests() if dwc3_gadget_ep_cleanup_completed_request() fails, we break early, causing the items on the local list_head to be lost. This issue showed up as problems on the db845c/RB3 board, where adb connetions would fail, showing the device as "offline". This patch tries to fix the issue by if we are returning early we splice in the local list head back into the started_list and return (avoiding an infinite loop, as the started_list is now non-null). Not sure if this is fully correct, but seems to work for me so I wanted to share for feedback. Cc: Wesley Cheng Cc: Felipe Balbi Cc: Greg Kroah-Hartman Cc: Alan Stern Cc: Jack Pham Cc: Thinh Nguyen Cc: Todd Kjos Cc: Amit Pundir Cc: YongQin Liu Cc: Sumit Semwal Cc: Petri Gynther Cc: linux-usb@vger.kernel.org Fixes: d25d85061bd8 ("usb: dwc3: gadget: Use list_replace_init() before traversing lists") Signed-off-by: John Stultz --- drivers/usb/dwc3/gadget.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index b8d4b2d327b23..a73ebe8e75024 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2990,6 +2990,12 @@ static void dwc3_gadget_ep_cleanup_completed_requests(struct dwc3_ep *dep, break; } + if (!list_empty(&local)) { + list_splice_tail(&local, &dep->started_list); + /* Return so we don't hit the restart case and loop forever */ + return; + } + if (!list_empty(&dep->started_list)) goto restart; } -- 2.25.1