From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: zhiguang.liu@intel.com) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by groups.io with SMTP; Sun, 26 May 2019 17:31:29 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 May 2019 17:31:29 -0700 X-ExtLoop1: 1 Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga006.jf.intel.com with ESMTP; 26 May 2019 17:31:29 -0700 Received: from fmsmsx161.amr.corp.intel.com (10.18.125.9) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 26 May 2019 17:31:28 -0700 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by FMSMSX161.amr.corp.intel.com (10.18.125.9) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 26 May 2019 17:31:28 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.249]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.10]) with mapi id 14.03.0415.000; Mon, 27 May 2019 08:31:26 +0800 From: "Zhiguang Liu" To: "Ni, Ray" , "devel@edk2.groups.io" CC: "Justen, Jordan L" , Andrew Fish Subject: Re: [PATCH] EmulatorPkg: Fix bugs about MiscBootServices Thread-Topic: [PATCH] EmulatorPkg: Fix bugs about MiscBootServices Thread-Index: AQHVEgk8OjMufGjE+kywxItR4/LUaqZ5/B2QgAQiBaA= Date: Mon, 27 May 2019 00:31:26 +0000 Message-ID: <12C615F56EBD0740AAC515819FA4CD356ABFB0@shsmsx102.ccr.corp.intel.com> References: <20190524081743.18780-1-zhiguang.liu@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C15EC73@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5C15EC73@SHSMSX104.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: zhiguang.liu@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello, Ray I did the implementation myself. I just found there did be the same function in \Omap35xxPkg\Library\Omap35xxTimerLib\TimerLib.c In old version. Should I use the existing code like following=20 \Omap35xxPkg\Library\Omap35xxTimerLib\TimerLib.c UINTN EFIAPI MicroSecondDelay ( IN UINTN MicroSeconds ) { UINT64 NanoSeconds; NanoSeconds =3D MultU64x32(MicroSeconds, 1000); while (NanoSeconds > (UINTN)-1) { NanoSecondDelay((UINTN)-1); NanoSeconds -=3D (UINTN)-1; } NanoSecondDelay(NanoSeconds); return MicroSeconds; } Best Regards, Zhiguang Liu >-----Original Message----- >From: Ni, Ray >Sent: Friday, May 24, 2019 5:08 PM >To: Liu, Zhiguang ; devel@edk2.groups.io >Cc: Justen, Jordan L ; Andrew Fish > >Subject: RE: [PATCH] EmulatorPkg: Fix bugs about MiscBootServices > >Zhiguang, >For the first issue, where does the fix come from? >Or you did the implementation yourself? > >I ask this because I want to make sure the code is from an existing tested >implementation. > >Thanks, >Ray > >> -----Original Message----- >> From: Liu, Zhiguang >> Sent: Friday, May 24, 2019 4:18 PM >> To: devel@edk2.groups.io >> Cc: Justen, Jordan L ; Andrew Fish >> ; Ni, Ray >> Subject: [PATCH] EmulatorPkg: Fix bugs about MiscBootServices >> >> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D1757 >> >> This patch fix two issues. >> 1. >> The previous code "NanoSecondDelay (MicroSeconds * 1000)" >> may cause data overflow. >> 2. >> Delete some code in >> /EmulatorPkg/ResetRuntimeDxe/Reset.c >> which may cause Tpl problems when invoked by watchdog. >> I think it is ok to delete these code, because it will >> be more like what NT32 does. >> >> Signed-off-by: Zhiguang Liu >> Cc: Jordan Justen >> Cc: Andrew Fish >> Cc: Ray Ni >> --- >> EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c | 14 >> +++++++++++++- >> EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c | 14 ++++++++++++= +- >> EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c | 14 ++++++++++++= +- >> EmulatorPkg/ResetRuntimeDxe/Reset.c | 24 ------------= ------------ >> 4 files changed, 39 insertions(+), 27 deletions(-) >> >> diff --git a/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> b/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> index c331cbba9c..813963de7b 100644 >> --- a/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> +++ b/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> @@ -33,7 +33,19 @@ MicroSecondDelay ( >> IN UINTN MicroSeconds >> ) >> { >> - return NanoSecondDelay (MicroSeconds * 1000); >> + UINTN Remainder; >> + UINTN Counter; >> + UINTN Index; >> + Counter =3D (UINTN) DivU64x32Remainder ( >> + MultU64x32 (MicroSeconds, 1000), >> + 0xffffffff, >> + &Remainder >> + ); >> + for (Index =3D 0; Index < Counter; Index++) { >> + NanoSecondDelay (0xffffffff); >> + } >> + NanoSecondDelay (Remainder); >> + return MicroSeconds; >> } >> >> >> diff --git a/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> b/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> index 14cae4214c..590ce55fae 100644 >> --- a/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> +++ b/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> @@ -64,7 +64,19 @@ MicroSecondDelay ( >> IN UINTN MicroSeconds >> ) >> { >> - return NanoSecondDelay (MicroSeconds * 1000); >> + UINTN Remainder; >> + UINTN Counter; >> + UINTN Index; >> + Counter =3D (UINTN) DivU64x32Remainder ( >> + MultU64x32 (MicroSeconds, 1000), >> + 0xffffffff, >> + &Remainder >> + ); >> + for (Index =3D 0; Index < Counter; Index++) { >> + NanoSecondDelay (0xffffffff); >> + } >> + NanoSecondDelay (Remainder); >> + return MicroSeconds; >> } >> >> >> diff --git a/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> b/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> index cce46fb366..dcac32a51f 100644 >> --- a/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> +++ b/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> @@ -30,7 +30,19 @@ MicroSecondDelay ( >> IN UINTN MicroSeconds >> ) >> { >> - return NanoSecondDelay (MicroSeconds * 1000); >> + UINTN Remainder; >> + UINTN Counter; >> + UINTN Index; >> + Counter =3D (UINTN) DivU64x32Remainder ( >> + MultU64x32 (MicroSeconds, 1000), >> + 0xffffffff, >> + &Remainder >> + ); >> + for (Index =3D 0; Index < Counter; Index++) { >> + NanoSecondDelay (0xffffffff); >> + } >> + NanoSecondDelay (Remainder); >> + return MicroSeconds; >> } >> >> /** >> diff --git a/EmulatorPkg/ResetRuntimeDxe/Reset.c >> b/EmulatorPkg/ResetRuntimeDxe/Reset.c >> index 19504825c9..9439f9ccff 100644 >> --- a/EmulatorPkg/ResetRuntimeDxe/Reset.c >> +++ b/EmulatorPkg/ResetRuntimeDxe/Reset.c >> @@ -29,30 +29,6 @@ EmuResetSystem ( >> IN VOID *ResetData OPTIONAL >> ) >> { >> - EFI_STATUS Status; >> - UINTN HandleCount; >> - EFI_HANDLE *HandleBuffer; >> - UINTN Index; >> - >> - // >> - // Disconnect all >> - // >> - Status =3D gBS->LocateHandleBuffer ( >> - AllHandles, >> - NULL, >> - NULL, >> - &HandleCount, >> - &HandleBuffer >> - ); >> - if (!EFI_ERROR (Status)) { >> - for (Index =3D 0; Index < HandleCount; Index++) { >> - Status =3D gBS->DisconnectController (HandleBuffer[Index], NULL, = NULL); >> - } >> - >> - gBS->FreePool (HandleBuffer); >> - } >> - >> - >> // >> // Discard ResetType, always return 0 as exit code >> // >> -- >> 2.21.0.windows.1