Reviewed-by: Ray Ni <ray...@intel.com> > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Jordan Justen > Sent: Wednesday, September 18, 2019 11: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 (#47497): https://edk2.groups.io/g/devel/message/47497 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] -=-=-=-=-=-=-=-=-=-=-=-