Received: by 2002:a05:6358:700f:b0:131:369:b2a3 with SMTP id 15csp78222rwo; Tue, 1 Aug 2023 13:13:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlGMtQwQsCUnhWdJAZkm7WFGy+8dzKfu4q+zdjnac4BBtYqap8eaX6JFm7vcErpl/B5tOVLU X-Received: by 2002:a17:903:230b:b0:1b8:656f:76e7 with SMTP id d11-20020a170903230b00b001b8656f76e7mr16762226plh.23.1690920838127; Tue, 01 Aug 2023 13:13:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690920838; cv=none; d=google.com; s=arc-20160816; b=A+tNA6CAGyGtZ14TArFqqZUrIt2EzwcZeh6mIXcVvuXgacgFASrehEjl/7I0W8ZlHZ na922sollHwkeMKU3pRg9p+q8DL8Pbbc48OM1i9chN1XK0XfO5y4pINw3gloNLQMgcEE yU5QltXYbnTDOE5NnznmPR++yhHRXFBiTADPq9DukapEXOx5DgkIKfpNf35IV8GntX31 pinVtMxPYsXJ3oKFgxm6xwprI549W07C1UJnzzJX80nkJcKXF0klcXIbreK9P+B+2I0w LcYZwdRO668boNvLkUT3+YR9Cx5CPT9GeAvAE5u1oAt+8hiq1XWXuYojmmLSOwMfPbrw KJyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature; bh=qC6t3oUXIHBy+uYFBXDAZt69xeIT0wgwqsu2FTL8kDg=; fh=se+Q3DDK5eyj7Vd2+2xBCY3hkQMNwpUjH2EYevdXqUk=; b=jFpbbibOUk5YOyc1gi+O7LRWzxG3g2OMEK9vHWlbxpwfNAR/q6XZaoXQDUjAQAIVaG 3geDNTf44j5x29hJQNkfd27wball0FAUju6Mjei4LyJx/BDOd5jPlKBOSyLcRY63vA6V wAkvL00vnEPUy3M7DMB2+gUJbJ10TqnTAUQ4ioST4gtugNDqdDH7TLUbTur6j2Boy2D8 4jF1jEnEJBj89wfxJ4wXUJhKievWD5+OvAnlIu8D9p7bEO4jLOE8ZcqH9Wqp4H/HjLG0 pN73N+LbCx9O9vaNAjtXU3xjwQsxGiDDQslHGPBSjk9AuKDZcv1KruN33021kAEMyMOX u8FQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=FzYrNBQ6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o18-20020a170903301200b001b85a2976f0si9312297pla.563.2023.08.01.13.13.44; Tue, 01 Aug 2023 13:13:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=FzYrNBQ6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232344AbjHAT1Y (ORCPT + 99 others); Tue, 1 Aug 2023 15:27:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230190AbjHAT1W (ORCPT ); Tue, 1 Aug 2023 15:27:22 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8BA1F9C; Tue, 1 Aug 2023 12:27:21 -0700 (PDT) Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 371HvWQb019512; Tue, 1 Aug 2023 19:27:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id; s=qcppdkim1; bh=qC6t3oUXIHBy+uYFBXDAZt69xeIT0wgwqsu2FTL8kDg=; b=FzYrNBQ6MUZ7WjnX4xeIMfjS64NzTnQ6y6SwDge7IvwquPAboHpu23tWYIxTgBolMMx3 FZukU+7JTyLwdScdkYgH9GDhb38Vl+NUg/j82FMaTqtAuGz+tca+izCgPExQDTACitZe E6pVhikwkPB9jicp8BjfkUmgSRHEEPJPAEh9uL2j9TkFWOhLb2+oYEdIvnhuueoEBDOD o1x+2n5OY4SjXRuL48m7y6LP7ns5TEg0qFFGnLqGlylO3C2qdWvZFrgstC5DzHOdLbii PrRsVih7RjSolYOcamd40ZrS6RJT3qWLqIImUhlepnNeM+8KI1Je8szUJkUTq7V7wJLR GQ== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3s76jv07pd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 01 Aug 2023 19:27:01 +0000 Received: from pps.filterd (NALASPPMTA04.qualcomm.com [127.0.0.1]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTP id 371JMVmI015689; Tue, 1 Aug 2023 19:27:00 GMT Received: from pps.reinject (localhost [127.0.0.1]) by NALASPPMTA04.qualcomm.com (PPS) with ESMTPS id 3s4uum4x09-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Aug 2023 19:27:00 +0000 Received: from NALASPPMTA04.qualcomm.com (NALASPPMTA04.qualcomm.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 371JQxvE019622; Tue, 1 Aug 2023 19:27:00 GMT Received: from hu-devc-lv-u18-c.qualcomm.com (hu-eserrao-lv.qualcomm.com [10.47.235.27]) by NALASPPMTA04.qualcomm.com (PPS) with ESMTP id 371JQxX9019621; Tue, 01 Aug 2023 19:26:59 +0000 Received: by hu-devc-lv-u18-c.qualcomm.com (Postfix, from userid 464172) id AAF6E500171; Tue, 1 Aug 2023 12:26:59 -0700 (PDT) From: Elson Roy Serrao To: Thinh.Nguyen@synopsys.com, gregkh@linuxfoundation.org, felipe.balbi@linux.intel.com, rogerq@kernel.org, surong.pang@unisoc.com Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, quic_wcheng@quicinc.com, quic_jackp@quicinc.com, Elson Roy Serrao , stable@vger.kernel.org Subject: [PATCH] usb: dwc3: Properly handle processing of pending events Date: Tue, 1 Aug 2023 12:26:58 -0700 Message-Id: <20230801192658.19275-1-quic_eserrao@quicinc.com> X-Mailer: git-send-email 2.17.1 X-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: Md49xazC3fLzIVoM_YxYIPwPfcMvieD- X-Proofpoint-GUID: Md49xazC3fLzIVoM_YxYIPwPfcMvieD- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-08-01_17,2023-08-01_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 malwarescore=0 clxscore=1011 mlxscore=0 suspectscore=0 mlxlogscore=386 phishscore=0 impostorscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2308010173 X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If dwc3 is runtime suspended we defer processing the event buffer until resume, by setting the pending_events flag. Set this flag before triggering resume to avoid race with the runtime resume callback. While handling the pending events, in addition to checking the event buffer we also need to process it. Handle this by explicitly calling dwc3_thread_interrupt(). Also balance the runtime pm get() operation that triggered this processing. Cc: stable@vger.kernel.org Fixes: fc8bb91bc83e ("usb: dwc3: implement runtime PM") Signed-off-by: Elson Roy Serrao --- Change separated from below series as an independent fix based on the earlier discussion https://lore.kernel.org/all/be57511d-2005-a1f5-d5a5-809e71029aec@quicinc.com/ drivers/usb/dwc3/gadget.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 5fd067151fbf..858fe4c299b7 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -4455,9 +4455,14 @@ static irqreturn_t dwc3_check_event_buf(struct dwc3_event_buffer *evt) u32 count; if (pm_runtime_suspended(dwc->dev)) { + dwc->pending_events = true; + /* + * Trigger runtime resume. The get() function will be balanced + * after processing the pending events in dwc3_process_pending + * events(). + */ pm_runtime_get(dwc->dev); disable_irq_nosync(dwc->irq_gadget); - dwc->pending_events = true; return IRQ_HANDLED; } @@ -4718,6 +4723,8 @@ void dwc3_gadget_process_pending_events(struct dwc3 *dwc) { if (dwc->pending_events) { dwc3_interrupt(dwc->irq_gadget, dwc->ev_buf); + dwc3_thread_interrupt(dwc->irq_gadget, dwc->ev_buf); + pm_runtime_put(dwc->dev); dwc->pending_events = false; enable_irq(dwc->irq_gadget); } -- 2.17.1