Jordan: Thanks for your suggestion. I update the style and push @ d652b458f576de785e9f905e6690e28904b1eed1
Thanks Liming >-----Original Message----- >From: Justen, Jordan L >Sent: Thursday, September 19, 2019 2:53 AM >To: Gao, Liming <liming....@intel.com>; devel@edk2.groups.io >Cc: Johnson, Michael <michael.john...@intel.com>; Andrew Fish ><af...@apple.com>; Ni, Ray <ray...@intel.com>; Johnson >Subject: Re: [edk2-devel] [Patch] EmulatorPkg/TimerLib: Add missing >GetTimeInNanoSecond function > >On 2019-09-18 01:13:54, Liming Gao wrote: >> From: mjohn4 <michael.john...@intel.com> > >It looks like the author is not set properly. If you run "git log -1", >then it'll probably show mjohn4 rather than Michael Johnson. > >Michael should run: > >$ git config --global user.name "Michael Johnson" > >After that when git commit it will get the correct author name in the >patch. > >Michael, Liming: You can adjust it locally with: > >git commit --amend --author="Michael Johnson ><michael.john...@intel.com>" > >> >> Add GetTimeInNanoSecond, already declared in the TimerLib API, >> to EmulatorPkg implementations of TimerLib. >> >> Cc: Jordan Justen <jordan.l.jus...@intel.com> >> Cc: Andrew Fish <af...@apple.com> >> Cc: Ray Ni <ray...@intel.com> >> Signed-off-by: Johnson, Michael <michael.john...@intel.com> > >To be a valid email address, I think this should either be: > >Signed-off-by: "Johnson, Michael" <michael.john...@intel.com> > >or > >Signed-off-by: Michael Johnson <michael.john...@intel.com> > >The second form is more common. > >If user.name was set as above then "git commit -s" would add it to the >patch automatically, and correctly. > >Aside from all that, it seems like the code matches other >implementations in edk2, so: > >Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> > >> --- >> .../Library/DxeCoreTimerLib/DxeCoreTimerLib.c | 45 >++++++++++++++++++++- >> EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c | 45 >++++++++++++++++++++- >> EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c | 47 >+++++++++++++++++++++- >> 3 files changed, 134 insertions(+), 3 deletions(-) >> >> diff --git a/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >b/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> index c331cbba9c..ab0de143c4 100644 >> --- a/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> +++ b/EmulatorPkg/Library/DxeCoreTimerLib/DxeCoreTimerLib.c >> @@ -1,12 +1,13 @@ >> /** @file >> A non-functional instance of the Timer Library. >> >> - Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> >> + Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> >> SPDX-License-Identifier: BSD-2-Clause-Patent >> >> **/ >> >> #include <PiPei.h> >> +#include <Library/BaseLib.h> >> #include <Library/TimerLib.h> >> #include <Library/DebugLib.h> >> #include <Library/EmuThunkLib.h> >> @@ -119,4 +120,46 @@ GetPerformanceCounterProperties ( >> return gEmuThunk->QueryPerformanceFrequency (); >> } >> >> +/** >> + Converts elapsed ticks of performance counter to time in nanoseconds. >> + >> + This function converts the elapsed ticks of running performance counter >to >> + time value in unit of nanoseconds. >> + >> + @param Ticks The number of elapsed ticks of running performance >counter. >> + >> + @return The elapsed time in nanoseconds. >> + >> +**/ >> +UINT64 >> +EFIAPI >> +GetTimeInNanoSecond ( >> + IN UINT64 Ticks >> + ) >> +{ >> + UINT64 Frequency; >> + UINT64 NanoSeconds; >> + UINT64 Remainder; >> + INTN Shift; >> + >> + Frequency = GetPerformanceCounterProperties (NULL, NULL); >> + >> + // >> + // Ticks >> + // Time = --------- x 1,000,000,000 >> + // Frequency >> + // >> + NanoSeconds = MultU64x32 (DivU64x64Remainder (Ticks, Frequency, >&Remainder), 1000000000u); >> + >> + // >> + // Ensure (Remainder * 1,000,000,000) will not overflow 64-bit. >> + // Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < >2^(64-30) = 2^34, >> + // i.e. highest bit set in Remainder should <= 33. >> + // >> + Shift = MAX (0, HighBitSet64 (Remainder) - 33); >> + Remainder = RShiftU64 (Remainder, (UINTN) Shift); >> + Frequency = RShiftU64 (Frequency, (UINTN) Shift); >> + NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, >1000000000u), Frequency, NULL); >> >> + return NanoSeconds; >> +} >> diff --git a/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >b/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> index 14cae4214c..1bbc9e0162 100644 >> --- a/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> +++ b/EmulatorPkg/Library/DxeTimerLib/DxeTimerLib.c >> @@ -1,7 +1,7 @@ >> /** @file >> A non-functional instance of the Timer Library. >> >> - Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> >> + Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> >> SPDX-License-Identifier: BSD-2-Clause-Patent >> >> **/ >> @@ -198,3 +198,46 @@ DxeTimerLibConstructor ( >> return EFI_SUCCESS; >> } >> >> +/** >> + Converts elapsed ticks of performance counter to time in nanoseconds. >> + >> + This function converts the elapsed ticks of running performance counter >to >> + time value in unit of nanoseconds. >> + >> + @param Ticks The number of elapsed ticks of running performance >counter. >> + >> + @return The elapsed time in nanoseconds. >> + >> +**/ >> +UINT64 >> +EFIAPI >> +GetTimeInNanoSecond ( >> + IN UINT64 Ticks >> + ) >> +{ >> + UINT64 Frequency; >> + UINT64 NanoSeconds; >> + UINT64 Remainder; >> + INTN Shift; >> + >> + Frequency = GetPerformanceCounterProperties (NULL, NULL); >> + >> + // >> + // Ticks >> + // Time = --------- x 1,000,000,000 >> + // Frequency >> + // >> + NanoSeconds = MultU64x32 (DivU64x64Remainder (Ticks, Frequency, >&Remainder), 1000000000u); >> + >> + // >> + // Ensure (Remainder * 1,000,000,000) will not overflow 64-bit. >> + // Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < >2^(64-30) = 2^34, >> + // i.e. highest bit set in Remainder should <= 33. >> + // >> + Shift = MAX (0, HighBitSet64 (Remainder) - 33); >> + Remainder = RShiftU64 (Remainder, (UINTN) Shift); >> + Frequency = RShiftU64 (Frequency, (UINTN) Shift); >> + NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, >1000000000u), Frequency, NULL); >> + >> + return NanoSeconds; >> +} >> diff --git a/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >b/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> index cce46fb366..132abb2c04 100644 >> --- a/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> +++ b/EmulatorPkg/Library/PeiTimerLib/PeiTimerLib.c >> @@ -1,12 +1,13 @@ >> /** @file >> A non-functional instance of the Timer Library. >> >> - Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> >> + Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR> >> SPDX-License-Identifier: BSD-2-Clause-Patent >> >> **/ >> >> #include <PiPei.h> >> +#include <Library/BaseLib.h> >> #include <Library/TimerLib.h> >> #include <Library/DebugLib.h> >> #include <Library/PeiServicesLib.h> >> @@ -166,3 +167,47 @@ GetPerformanceCounterProperties ( >> >> return 0; >> } >> + >> +/** >> + Converts elapsed ticks of performance counter to time in nanoseconds. >> + >> + This function converts the elapsed ticks of running performance counter >to >> + time value in unit of nanoseconds. >> + >> + @param Ticks The number of elapsed ticks of running performance >counter. >> + >> + @return The elapsed time in nanoseconds. >> + >> +**/ >> +UINT64 >> +EFIAPI >> +GetTimeInNanoSecond ( >> + IN UINT64 Ticks >> + ) >> +{ >> + UINT64 Frequency; >> + UINT64 NanoSeconds; >> + UINT64 Remainder; >> + INTN Shift; >> + >> + Frequency = GetPerformanceCounterProperties (NULL, NULL); >> + >> + // >> + // Ticks >> + // Time = --------- x 1,000,000,000 >> + // Frequency >> + // >> + NanoSeconds = MultU64x32 (DivU64x64Remainder (Ticks, Frequency, >&Remainder), 1000000000u); >> + >> + // >> + // Ensure (Remainder * 1,000,000,000) will not overflow 64-bit. >> + // Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < >2^(64-30) = 2^34, >> + // i.e. highest bit set in Remainder should <= 33. >> + // >> + Shift = MAX (0, HighBitSet64 (Remainder) - 33); >> + Remainder = RShiftU64 (Remainder, (UINTN) Shift); >> + Frequency = RShiftU64 (Frequency, (UINTN) Shift); >> + NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, >1000000000u), Frequency, NULL); >> + >> + return NanoSeconds; >> +} >> -- >> 2.13.0.windows.1 >> >> >> >> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#47559): https://edk2.groups.io/g/devel/message/47559 Mute This Topic: https://groups.io/mt/34185670/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-