From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web12.3372.1598986570883769425 for ; Tue, 01 Sep 2020 11:56:11 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=hxFgA/MQ; spf=pass (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=0513205a6d=patrick.henz@hpe.com) Received: from pps.filterd (m0150244.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 081Im140008220; Tue, 1 Sep 2020 18:56:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=dGHSTctIesWWKmtJGpvWAs9JcSR6QqSkvlW3tVU4GdM=; b=hxFgA/MQOAzJFyQqo8LQp9zBmjMEfOuE2iPH5JwP8fr/Qt8lcDeHpTRZ93580STL18g/ EYIvoC0/iGvuezVOzI3txk4KEMcG1vjEkPl1NhUBkplJT90faPxo2H24ajXfn39lLOPw 8Rrv06sRuhaVYJZyo64uBigu5JY1UlYg3QeguYdUGCfI0CHZ2ef0NRyRoslqMvO2RntO PKwCIO1TmkrQWiaiQOehtHilZAI5Iqh8+ovGqqfoFR1tY8QBKXsB3kvUuK7PrYbV9U5W NEun4sVYTWPuyEyd6uG+XueeDyjKV+yNnvZFfwZ/Odf1nvYsWYMjDoKyFSVuNZO+rh45 Og== Received: from g4t3426.houston.hpe.com (g4t3426.houston.hpe.com [15.241.140.75]) by mx0b-002e3701.pphosted.com with ESMTP id 337fpd0j8w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 01 Sep 2020 18:56:09 +0000 Received: from G9W8455.americas.hpqcorp.net (g9w8455.houston.hp.com [16.216.161.94]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3426.houston.hpe.com (Postfix) with ESMTPS id 84F3371; Tue, 1 Sep 2020 18:56:07 +0000 (UTC) Received: from G4W9121.americas.hpqcorp.net (2002:10d2:1510::10d2:1510) by G9W8455.americas.hpqcorp.net (2002:10d8:a15e::10d8:a15e) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 1 Sep 2020 18:55:53 +0000 Received: from NAM04-CO1-obe.outbound.protection.outlook.com (15.241.52.11) by G4W9121.americas.hpqcorp.net (16.210.21.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Tue, 1 Sep 2020 18:55:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g0+5GiSEv80fC2wZy1MdK2VmoduQKVlcCtNbPqblMCzCZ/m+n9WK33OmsKYb/D1cTNE2Ga+zma8tXyoH7yaZyE6LG2f35ELP/27aAFiUqP5GXf3FP2p41jxy/SIsUFliQ7AucPCHYNhXnofNOH4iGm2YKg6kX9MExhDqmKJlQMx7Uvj8x3dQGmBNB0Y/d0HC2TpMUrkddgtRfHPdOUSvj9tAoYP/tQb3GPx8DJ7fBrc1zeVHPtsoYciwCm3MV0nopEUawZ8ffJIa6fTOYnITI8WybS9tdcTMeBqmN2yvC7eV7BZRF/BC1rmJSBFGApe+0W9pjL3v7Xs+u7m4FtKc7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dGHSTctIesWWKmtJGpvWAs9JcSR6QqSkvlW3tVU4GdM=; b=SN8kR1V3AEcFLibp9CkZzTxM91vtHEH3lRLnlYchqtHSkYXR+9locBUp4Pw7RC4J3Y1mtxJ+sesfPiJv9FaoaXam4hIsPcoKc3rGHBwc1mxV1hvjwE0SinEbjfwdOBDGSpSH9TXfUNN3RVA5pwdH4j6EW1BIFVyfYYfpd0aIJz3t6rTAu3kaBNKtNsq3I6p7dYdaXmDfFDdhtXodXIXjyMJJcXmkmHG9Uzq3Xacy0SAwrb38E6+cKdGlB8q+MspgAUo+SmHs2I8QTo1pZ95dS+UjJ2xlX1q5a/mNiwVXh3kwuXQ9+8rP/9UNu7m52NQqo5iScgGGKRVh2E03h5IZbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Authentication-Results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=hpe.com; Received: from TU4PR8401MB0478.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7709::19) by TU4PR8401MB0591.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:770c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.21; Tue, 1 Sep 2020 18:55:51 +0000 Received: from TU4PR8401MB0478.NAMPRD84.PROD.OUTLOOK.COM ([fe80::4968:3a88:e4a6:5cea]) by TU4PR8401MB0478.NAMPRD84.PROD.OUTLOOK.COM ([fe80::4968:3a88:e4a6:5cea%8]) with mapi id 15.20.3326.025; Tue, 1 Sep 2020 18:55:51 +0000 From: patrick.henz@hpe.com To: CC: henz , Jian J Wang , Hao A Wu , Ray Ni Subject: [PATCH 1/1] MdeModulePkg/XhciDxe: Fix Broken Timeouts Date: Tue, 1 Sep 2020 13:55:06 -0500 Message-ID: X-Mailer: git-send-email 2.28.0 In-Reply-To: References: X-ClientProxiedBy: CH2PR12CA0015.namprd12.prod.outlook.com (2603:10b6:610:57::25) To TU4PR8401MB0478.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7709::19) X-MS-Exchange-MessageSentRepresentingType: 1 Received: from 255.255.255.255 (255.255.255.255) by CH2PR12CA0015.namprd12.prod.outlook.com (2603:10b6:610:57::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.19 via Frontend Transport; Tue, 1 Sep 2020 18:55:51 +0000 X-Mailer: git-send-email 2.28.0 X-Originating-IP: [76.17.188.158] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 31703864-1190-48ad-293c-08d84ea8a5c5 X-MS-TrafficTypeDiagnostic: TU4PR8401MB0591: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4125; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kb8CnBKbi8UGITQ4Q660xJnRW9OMu0yJBbluuQOhb0vfd44UNzA9KNQ/FBx4rTUhTN3k/TtA6Nxu3N4RlBwyGDJwo4CVn6TCaHkOqqkoLN6nuxWaLeKxPVrQSjzVHvgNK4tFNXd7AndG3D2AB+7NFhgXi/BFVCfwHsM6EGiwu6HkMLix0Xo5CBjFM5qpJXLHeE1a6X8P43A9wTtSVp/jt6qblLYdLcxV9wChE1n9Z1zE/TpZJm46SkYEV+KJoa+jAM2NfI+anMfIGnV/q5TS7ZdQ7bmz41FjfKiXjVSQCpNOk4YWiX0pcl7Utc6k7KGozNb/YbSfcCiVmV0HE8s2JmbXVjKjgZcf9Zjd1bGoApD0Y8MiL8qsC0wPZYGt1SdeUiUbKHPmcmoDLxIUhp1XRg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TU4PR8401MB0478.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(39860400002)(366004)(136003)(376002)(346002)(396003)(66476007)(86362001)(54906003)(2906002)(66946007)(6916009)(9686003)(6486002)(66556008)(2616005)(956004)(316002)(16576012)(5660300002)(8936002)(8676002)(186003)(6666004)(4326008)(478600001)(36756003)(52116002)(83380400001)(26005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 6r91ZdafllNr8KuNr9t4mI0ClxIlbQdRPuzWp49+w3FhmbhXz82q3eeU29uKlRYtAzfbggLrxOBsN6iVjJaT8P+akmuufuWWta3BdSv1M0Ahq9NjKRQ92ONCMzoYItMfOAxkXXrdQelX3WWoNvz62wLJg/KV4wPR72AHjuPVfjqCOsm5fBvo78jYGGIvoXfGewm7dNsvuXVV/O7/bO3x0XBrlXILSfchT+2fpvvmc5oJmDFxzc5PxOo6w58WOpDWN+xkljHXfPt4nM5g8TJCjRiuK9MAmW3Ca868ZiXQF+MVYlURdJMtxt5hyiR+12BBOVjZDFDPZ3l2e9Q7kUZe7t+FU4xIXqnsbdsjc+XV26n7odYe+bg6FN1x0rpd7z/sIW6EPakz+c6jVkWpIhyVqwJpL8bxniqBdIWAJl71PtQYtartOijFLgm922FWkiZcTIiUPsVB2fxSTF5Tj2HzatBrvf4WiyCKFymJ07O2MjvtFN4A+FuQzJTZlTU+D9TLxeshC7sP7VCw13ltqGgSHZejR1Pkuwy+9z1YdBj4YGXDOe+1CN8cbV1OqgZOwfmmI5O2QL4Pk8MPU9SPTQMnh/3XWVpDVvbdoBSxUgW0oBJOnfMeszVsRWYKLwAw97/mdIjrr8k20YmqmTFBASodrw== X-MS-Exchange-CrossTenant-Network-Message-Id: 31703864-1190-48ad-293c-08d84ea8a5c5 X-MS-Exchange-CrossTenant-AuthSource: TU4PR8401MB0478.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2020 18:55:51.7398 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: f4Sc/ThJO7YmgkTGdc4HPjCtAsVbUj0WHnHjaWsj8OpBARVDAe8W+ZnnoID7c38iZSkFzlTM/pLoS0FtAxztkQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TU4PR8401MB0591 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.687 definitions=2020-09-01_10:2020-09-01,2020-09-01 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 phishscore=0 spamscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=989 malwarescore=0 suspectscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2009010159 Content-Type: text/plain Content-Transfer-Encoding: quoted-printable From: henz REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D2948 Timeouts in the XhciDxe driver are taking longer than expected due to the timeout loops not accounting for code execution time. As en example, 5 second timeouts have been observed to take around 36 seconds to complete. Use SetTimer and Create/CheckEvent from Boot Services to determine when timeout occurred. Cc: Jian J Wang Cc: Hao A Wu Cc: Ray Ni Signed-off-by: Patrick Henz --- MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c | 28 ++++++++++++++++--- MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c | 34 +++++++++++++++++------- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c b/MdeModulePkg/Bus/Pci/= XhciDxe/XhciReg.c index 42b773ab31..5f7507f0a5 100644 --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c @@ -442,17 +442,37 @@ XhcWaitOpRegBit ( IN UINT32 Timeout=0D )=0D {=0D - UINT32 Index;=0D - UINT64 Loop;=0D + EFI_STATUS Status;=0D + EFI_EVENT TimeoutEvent;=0D =0D - Loop =3D Timeout * XHC_1_MILLISECOND;=0D + if (Timeout =3D=3D 0) {=0D + return EFI_TIMEOUT;=0D + }=0D +=0D + Status =3D gBS->CreateEvent (=0D + EVT_TIMER,=0D + TPL_CALLBACK,=0D + NULL,=0D + NULL,=0D + &TimeoutEvent=0D + );=0D =0D - for (Index =3D 0; Index < Loop; Index++) {=0D + if (!EFI_ERROR (Status)) {=0D + Status =3D gBS->SetTimer (TimeoutEvent,=0D + TimerRelative,=0D + EFI_TIMER_PERIOD_MILLISECONDS(Timeout));=0D + }=0D +=0D + do {=0D if (XHC_REG_BIT_IS_SET (Xhc, Offset, Bit) =3D=3D WaitToSet) {=0D return EFI_SUCCESS;=0D }=0D =0D gBS->Stall (XHC_1_MICROSECOND);=0D + } while (!EFI_ERROR(Status) && EFI_ERROR(gBS->CheckEvent (TimeoutEvent))= );=0D +=0D + if (TimeoutEvent !=3D NULL) {=0D + gBS->CloseEvent (TimeoutEvent);=0D }=0D =0D return EFI_TIMEOUT;=0D diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c b/MdeModulePkg/Bus/Pc= i/XhciDxe/XhciSched.c index ab8957c546..cf271f0493 100644 --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c @@ -1273,11 +1273,11 @@ XhcExecTransfer ( )=0D {=0D EFI_STATUS Status;=0D - UINTN Index;=0D - UINT64 Loop;=0D UINT8 SlotId;=0D UINT8 Dci;=0D BOOLEAN Finished;=0D + EFI_EVENT TimeoutEvent;=0D + EFI_STATUS TimerStatus;=0D =0D if (CmdTransfer) {=0D SlotId =3D 0;=0D @@ -1292,28 +1292,44 @@ XhcExecTransfer ( }=0D =0D Status =3D EFI_SUCCESS;=0D - Loop =3D Timeout * XHC_1_MILLISECOND;=0D - if (Timeout =3D=3D 0) {=0D - Loop =3D 0xFFFFFFFF;=0D - }=0D +=0D + TimerStatus =3D gBS->CreateEvent (=0D + EVT_TIMER,=0D + TPL_CALLBACK,=0D + NULL,=0D + NULL,=0D + &TimeoutEvent=0D + );=0D =0D XhcRingDoorBell (Xhc, SlotId, Dci);=0D =0D - for (Index =3D 0; Index < Loop; Index++) {=0D + if (!EFI_ERROR (TimerStatus)) {=0D + TimerStatus =3D gBS->SetTimer (TimeoutEvent,=0D + TimerRelative,=0D + (0 =3D=3D Timeout)?=0D + (EFI_TIMER_PERIOD_MICROSECONDS(0xFFFFFFFF= )):=0D + (EFI_TIMER_PERIOD_MILLISECONDS(Timeout)))= ;=0D + }=0D +=0D + do {=0D Finished =3D XhcCheckUrbResult (Xhc, Urb);=0D if (Finished) {=0D break;=0D }=0D gBS->Stall (XHC_1_MICROSECOND);=0D - }=0D + } while (!EFI_ERROR(TimerStatus) && EFI_ERROR(gBS->CheckEvent (TimeoutEv= ent)));=0D =0D - if (Index =3D=3D Loop) {=0D + if (!Finished) {=0D Urb->Result =3D EFI_USB_ERR_TIMEOUT;=0D Status =3D EFI_TIMEOUT;=0D } else if (Urb->Result !=3D EFI_USB_NOERROR) {=0D Status =3D EFI_DEVICE_ERROR;=0D }=0D =0D + if (TimeoutEvent !=3D NULL) {=0D + gBS->CloseEvent (TimeoutEvent);=0D + }=0D +=0D return Status;=0D }=0D =0D --=20 2.27.0