From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web10.6279.1600838586220824301 for ; Tue, 22 Sep 2020 22:23:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=S03Tcsjp; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: hao.a.wu@intel.com) IronPort-SDR: taTpUjCeKppAqoBy97WCL4MzZsR6cB9h08bvDX3rYEg8tANIMg1GT0gcavGvkjRm4zRLR7urci THrg13v0p2ow== X-IronPort-AV: E=McAfee;i="6000,8403,9752"; a="158177370" X-IronPort-AV: E=Sophos;i="5.77,293,1596524400"; d="scan'208";a="158177370" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2020 22:23:05 -0700 IronPort-SDR: MsOgBfmq7sZqwlX5MLMu05Ny66NgphitJhoqIW3d01PVqUiOGfTKoYIB1Rb8iRJpc2VFjOc2FG Ps/HxDQCzVHA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,293,1596524400"; d="scan'208";a="454765502" Received: from orsmsx605.amr.corp.intel.com ([10.22.229.18]) by orsmga004.jf.intel.com with ESMTP; 22 Sep 2020 22:23:04 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 22 Sep 2020 22:23:04 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 22 Sep 2020 22:23:04 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 22 Sep 2020 22:23:04 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.174) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Tue, 22 Sep 2020 22:23:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BdO7cW+LKG2htILc48AxmJFgzpVvDpdDJQcMhtYI7RenwpG6zPFdDgWio6UylwMk/LIeF/EWyz7xhP3RDrDEQoURvyCfvGn3+Q4n1f1hNuKJzGtnvqlY3TbtLhShECo4U4dcKLl/b7kxoIsbPkwaqI3MjOJcEJRekDZAO7iJ0VjI4Zmol6uKhENXnmj8N9c/wPGvCkxG6V5ZD+3PbiPkRcvrZp0o7qg+0d67crswPN1COM+LcM0dOxtSOiNnz+4WPjRTr7qJeH3B2u5mQwzu6pUZK63+K/Safo9PafvToOIhQlwnnx8gC6pKTvsu3WNSc8R5sSAwThq2y71x1Ync8w== 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=8QA9qAl+aRW/YF4c8OHm9MkL5vEhRouF/hQiRQ+xS2o=; b=QIKbFBmhMZ3I74RAGrtuoblDdeOD1etgpa1aJ/Kg6DlNAhyJg5zzfqkDjn9ZWc7+pyl9LYqMhLATY+grIJtS+TclKlfg2z1EOqKigD0mS352JHtiVReMRVflrs1+/2sqy6cQzqKejWlZt1KNF9BsuY69FA80E9hPMxizdFerY5+PZErUMP3foCJKLCJsOfjIka4YlPzfXPMNhtvo8lj7seV+K1eYoDkRbI9j0xizEas9F8/PuuceaYHSa8SZuImr/3DEQxuhB0PmqMtgV5sqxs7WzmQLi+++A6pQCPf+ly/p2nwlK3SaIEUhprY7qHGpb7mEw+UAQLglJIsYcgaHlQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8QA9qAl+aRW/YF4c8OHm9MkL5vEhRouF/hQiRQ+xS2o=; b=S03Tcsjpc6LIRlYQ2tsL2diR2XJNGwvS6AGfFiYB/bO2KkPW9anH3pRK4DSSZA3U38T9K+VbhKtkMvaPSMUaf72KE+4CajYs5szK4d6fU5ZoV0wx2IT5xs/crEMHQqwQKOOjmd9CZdnIu5LXKjqY+bSbrTDnNHC98BQhNHn3VwY= Received: from DM6PR11MB3673.namprd11.prod.outlook.com (2603:10b6:5:145::26) by DM6PR11MB2874.namprd11.prod.outlook.com (2603:10b6:5:c9::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11; Wed, 23 Sep 2020 05:22:59 +0000 Received: from DM6PR11MB3673.namprd11.prod.outlook.com ([fe80::8cce:1fea:5b93:da18]) by DM6PR11MB3673.namprd11.prod.outlook.com ([fe80::8cce:1fea:5b93:da18%5]) with mapi id 15.20.3391.027; Wed, 23 Sep 2020 05:22:59 +0000 From: "Wu, Hao A" To: "Ni, Ray" , "devel@edk2.groups.io" , "patrick.henz@hpe.com" CC: "Wang, Jian J" Subject: Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix Broken Timeouts Thread-Topic: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix Broken Timeouts Thread-Index: AQHWgUs82cadCyRNmkKDU4HvBxhYqqlWJO1AgAwdBQCABroOYIAMuB2AgAAabVA= Date: Wed, 23 Sep 2020 05:22:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.218] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d3eb44cb-67f7-47a0-9d05-08d85f80bc98 x-ms-traffictypediagnostic: DM6PR11MB2874: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /wQ10aL9VN54ZqStiaVzQ0QNjZYt24IajjMe/3LxvtHhXfOaDgbtZfW8lbNqiOVWZiLFAw2XZeU/+eJzAySgaJxspzhfdzybWvF5yc2mSNv8IB6zxJFFOWon2JbSGLc5VrHTBK+rO28V9hnzWDCTJlyLeuUfGw+y1xNlulI1NPkmLgQABqk8I2wXskTJbhRKfffEkv5YIqGmqrdqRVIDgduCBRtLRcdWaqOkNZUZz++NnwwmUCP5+iqf/U/L+4m8cMoKcGBXYWYaFFeCi/Diiy7rZ9zWLulyP+XxvPT8miDTMtEYKHkBtRwsW6y3IummCoiwj96nh7myz1cK+3FMCP5/+izjg0mWegRl5ARPpD4D+wQNKWew9it+jv3uA0HykdB4vN8VC9tTbqQnuA2fmA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB3673.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(366004)(376002)(39860400002)(136003)(346002)(86362001)(8936002)(83380400001)(6506007)(19627235002)(53546011)(110136005)(478600001)(966005)(107886003)(66946007)(66446008)(186003)(2906002)(33656002)(316002)(9686003)(76116006)(7696005)(55016002)(4326008)(5660300002)(66476007)(52536014)(66556008)(26005)(64756008)(71200400001)(8676002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: dWPT4CllMzeHkfT0wTEBKv+upc/2QoZlrpepquVhbIhL7bXx46CjUbn5KEMQgkGWo4s+FnGNnargdtOGvQkd3bVn6LXZofPXBE/4Ggt+T6H7W6X2RQ6bGBFke9YO0yQAL7Ks4WyDqVPNkOOKySGa+8bTeY5vIhLjhMgJ++6xJNNaR/6CFmqs8fKXbLgz9NUh4h4IWkNOboG4Ip+zfdrMTBqBV8JImicnvPzmZK+QiBEZFDDT6F7Xdu2Z8lRkIGTj0DdBk/rJ/rCKfJWBS8Wd89ROwKvvuYURXcoJjr+aRFmxcZn/Ryi7gU3Dc4UaqrO6MN6bOVSYqu01RAJYvfAnpvMZWjnr3mFfXzT76QdJSLomsnxJ3nje4XsK7IP1R8ukpR1KKllxeDyraXhIU5bqR7DPIlX6UKcIyGGiOa2NW4yNkLfxTZiuUe4GV/Sn9D/8mBAC3//JuDkpi5O88PuNuBVwt1Yiic10M+qISY3ZQuJx5lplJisEQlL0+vYHdEd+fNTTgsoaMJmsqrCsaQlT2drK3zjDAMFY7VBjQUBSrCpqr2iAm7b2Ug+yLW1Y6CofGZzCmzNE0ib4wRIFKMRrMN0h0mEP6qHSwopdjg4sRB4AwQU3cTEK48eecjrJl6AWO8AJCouxZDoKhmlffFVQtA== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB3673.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3eb44cb-67f7-47a0-9d05-08d85f80bc98 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2020 05:22:59.6056 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: E9S+rH4/GjO2w4N/SGf1nR8MvWjBV7t61+T+ee4XSfmzgMcfvSYjLY/v5x7p/3Q1XIqP7Xzc9XAQKpPe4X6EVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB2874 Return-Path: hao.a.wu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Ni, Ray > Sent: Wednesday, September 23, 2020 11:41 AM > To: Wu, Hao A ; devel@edk2.groups.io; > patrick.henz@hpe.com > Cc: Wang, Jian J > Subject: RE: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix > Broken Timeouts >=20 > Hao, > Yes the behavior should not be changed. > Can we keep the original behavior while still not creating the timer whe= n > infinite-loop is needed? Hello Patrick and Ray, For the origin (current) behavior of XhcExecTransfer(), when 'Timeout' equ= als 0, the function will attempt to set the timeout of value: 0xFFFFFFFF milliseconds =3D 4,294,967,295 milliseconds =3D ~1,193 hours Instead of creating a timer event for this case, I think we can just repla= ce it with an indefinite loop (maybe introducing a 'IndefiniteLoop' flag for the do-while statement). Best Regards, Hao Wu >=20 > Thanks, > Ray >=20 > > -----Original Message----- > > From: Wu, Hao A > > Sent: Tuesday, September 15, 2020 9:28 AM > > To: devel@edk2.groups.io; patrick.henz@hpe.com; Ni, Ray > > > > Cc: Wang, Jian J > > Subject: RE: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix > > Broken Timeouts > > > > > -----Original Message----- > > > From: devel@edk2.groups.io On Behalf Of > Henz, > > > Patrick > > > Sent: Friday, September 11, 2020 2:43 AM > > > To: devel@edk2.groups.io; Wu, Hao A ; Ni, Ray > > > > > > Cc: Wang, Jian J > > > Subject: Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix > > > Broken Timeouts > > > > > > Hi Hao and Ray, > > > > > > In regards to the behavior when Timeout =3D=3D 0, I did try to accou= nt > > > for that in my initial patch with the following logic: > > > > > > =09(0 =3D=3D > > > > Timeout)?(EFI_TIMER_PERIOD_MICROSECONDS(0xFFFFFFFF)):(EFI_TIMER_ > > > PERIOD_MILLISECONDS(Timeout)) > > > > > > This results in a timeout that happens sooner than what the current > > > code would produce, but it falls in line with what the original code > > > seemed to intend to do. Ray suggested that I enhance the code by not > > > creating the timer event when Timeout is 0, which I assumed meant > > > that XhcExecTransfer > > > () would just return. I personally think it would be a good idea to > > > keep this behavior in the code, but would like Ray's input on the > > > matter. Appreciate > > > > > > I prefer to keep the origin behavior. > > Ray, what is your comment on this? > > > > Best Regards, > > Hao Wu > > > > > > > the help! > > > > > > Thanks, > > > Patrick Henz > > > > > > -----Original Message----- > > > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf > > > Of Wu, Hao A > > > Sent: Wednesday, September 2, 2020 9:25 PM > > > To: devel@edk2.groups.io; Henz, Patrick ; Ni, > > > Ray > > > Cc: Wang, Jian J > > > Subject: Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix > > > Broken Timeouts > > > > > > Hello Patrick, a couple of inline comments below. > > > Hello Ray, need your input on one thing below as well. > > > > > > > > > > -----Original Message----- > > > > From: devel@edk2.groups.io On Behalf Of > > > > patrick.henz@hpe.com > > > > Sent: Thursday, September 3, 2020 1:05 AM > > > > To: devel@edk2.groups.io > > > > Cc: Patrick Henz ; Wang, Jian J > > > > ; Wu, Hao A ; Ni, Ray > > > > > > > > Subject: [edk2-devel] [PATCH v2 1/1] MdeModulePkg/XhciDxe: Fix > > > > Broken Timeouts > > > > > > > > From: Patrick Henz > > > > > > > > REF:INVALID URI REMOVED > > > > ocore.org_show-5Fbug.cgi-3Fid- > > > 3D2948&d=3DDwIFAg&c=3DC5b8zRQO1miGmBeVZ2LFWg > > > > > > > > &r=3Dwx4n0HbqxSAP19Eklmv6gq7ivDQlqQ_ITOkZIBUNNKg&m=3DOKlWpRL8ZyDf > > > hUEh6S4OU > > > > > aMasig0MPoajX7Vz2sDSvY&s=3DLTDbPsspkRCcWFBfThqhR_FaljF2kQLagB_t- > > > kbAm80&e > > > > =3D > > > > > > > > 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 | 35 > ++++++++++++++++--- > > > > MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c | 43 > > > > +++++++++++++++++++----- > > > > 2 files changed, 65 insertions(+), 13 deletions(-) > > > > > > > > diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c > > > > b/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c > > > > index 42b773ab31be..33ac13504669 100644 > > > > --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c > > > > +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c > > > > @@ -442,17 +442,44 @@ XhcWaitOpRegBit ( > > > > IN UINT32 Timeout > > > > ) > > > > { > > > > - UINT32 Index; > > > > - UINT64 Loop; > > > > + EFI_STATUS Status; > > > > + EFI_EVENT TimeoutEvent; > > > > > > > > - Loop =3D Timeout * XHC_1_MILLISECOND; > > > > + TimeoutEvent =3D NULL; > > > > > > > > - for (Index =3D 0; Index < Loop; Index++) { > > > > + if (Timeout =3D=3D 0) { > > > > + goto TIMEOUT; > > > > + } > > > > + > > > > + Status =3D gBS->CreateEvent ( > > > > + EVT_TIMER, > > > > + TPL_CALLBACK, > > > > + NULL, > > > > + NULL, > > > > + &TimeoutEvent > > > > + ); > > > > + > > > > + if (!EFI_ERROR (Status)) { > > > > + Status =3D gBS->SetTimer (TimeoutEvent, > > > > + TimerRelative, > > > > + > > > > + EFI_TIMER_PERIOD_MILLISECONDS(Timeout)); > > > > + } > > > > + > > > > + if (EFI_ERROR(Status)) { > > > > + goto TIMEOUT; > > > > + } > > > > > > > > > Could you help to refine the return status for the case when > > > CreateEvent or SetTimer calls fail? > > > I think it will return EFI_TIMEOUT at this moment, which might > > > confuse the caller. > > > You may need to modify the function description comment section for > > > the new return value also. > > > > > > A similar case applies to XhcExecTransfer() as well. > > > > > > > > > > + > > > > + do { > > > > if (XHC_REG_BIT_IS_SET (Xhc, Offset, Bit) =3D=3D WaitToSet) { > > > > return EFI_SUCCESS; > > > > } > > > > > > > > gBS->Stall (XHC_1_MICROSECOND); > > > > + } while (EFI_ERROR(gBS->CheckEvent (TimeoutEvent))); > > > > + > > > > +TIMEOUT: > > > > + if (TimeoutEvent !=3D NULL) { > > > > + gBS->CloseEvent (TimeoutEvent); > > > > } > > > > > > > > return EFI_TIMEOUT; > > > > diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > > > > b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > > > > index ab8957c546ee..d6290b5fe33b 100644 > > > > --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > > > > +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c > > > > @@ -1273,11 +1273,19 @@ XhcExecTransfer ( > > > > ) > > > > { > > > > EFI_STATUS Status; > > > > - UINTN Index; > > > > - UINT64 Loop; > > > > UINT8 SlotId; > > > > UINT8 Dci; > > > > BOOLEAN Finished; > > > > + EFI_EVENT TimeoutEvent; > > > > + EFI_STATUS TimerStatus; > > > > + > > > > + Status =3D EFI_SUCCESS; > > > > + Finished =3D FALSE; > > > > + TimeoutEvent =3D NULL; > > > > + > > > > + if (Timeout =3D=3D 0) { > > > > + goto DONE; > > > > + } > > > > > > > > if (CmdTransfer) { > > > > SlotId =3D 0; > > > > @@ -1291,29 +1299,46 @@ XhcExecTransfer ( > > > > ASSERT (Dci < 32); > > > > } > > > > > > > > - Status =3D EFI_SUCCESS; > > > > - Loop =3D Timeout * XHC_1_MILLISECOND; > > > > - if (Timeout =3D=3D 0) { > > > > - Loop =3D 0xFFFFFFFF; > > > > > > > > > Ray and Patrick, the previous behavior when 'Timeout' is 0 for this > > > function is that it will do a 'psudo-indefinite' loop by setting the > > > 'Loop' variable to the value of MAX_UINT32. > > > > > > But after the patch, the behavior got changed and the function will > > > directly return EFI_TIMEOUT when 'Timeout' is 0. > > > This behavior change might impact the callers when they expecting a > > > 'psudo- indefinite' timeout. > > > I think it would be better to keep the origin behavior, what is your > thought? > > > > > > Best Regards, > > > Hao Wu > > > > > > > > > > + TimerStatus =3D gBS->CreateEvent ( > > > > + EVT_TIMER, > > > > + TPL_CALLBACK, > > > > + NULL, > > > > + NULL, > > > > + &TimeoutEvent > > > > + ); > > > > + > > > > + if (!EFI_ERROR (TimerStatus)) { > > > > + TimerStatus =3D gBS->SetTimer (TimeoutEvent, > > > > + TimerRelative, > > > > + > > > > + EFI_TIMER_PERIOD_MILLISECONDS(Timeout)); > > > > + } > > > > + > > > > + if (EFI_ERROR (TimerStatus)) { > > > > + goto DONE; > > > > } > > > > > > > > XhcRingDoorBell (Xhc, SlotId, Dci); > > > > > > > > - for (Index =3D 0; Index < Loop; Index++) { > > > > + do { > > > > Finished =3D XhcCheckUrbResult (Xhc, Urb); > > > > if (Finished) { > > > > break; > > > > } > > > > gBS->Stall (XHC_1_MICROSECOND); > > > > - } > > > > + } while (EFI_ERROR(gBS->CheckEvent (TimeoutEvent))); > > > > > > > > - if (Index =3D=3D Loop) { > > > > +DONE: > > > > + if (!Finished) { > > > > Urb->Result =3D EFI_USB_ERR_TIMEOUT; > > > > Status =3D EFI_TIMEOUT; > > > > } else if (Urb->Result !=3D EFI_USB_NOERROR) { > > > > Status =3D EFI_DEVICE_ERROR; > > > > } > > > > > > > > + if (TimeoutEvent !=3D NULL) { > > > > + gBS->CloseEvent (TimeoutEvent); } > > > > + > > > > return Status; > > > > } > > > > > > > > -- > > > > 2.28.0 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >=20