On Tue, Feb 21, 2023 at 10:37:23AM +0530, Sunil V L via groups.io wrote: > Hi Andrei, > > Thank you very much for fixing this! > > On Fri, Feb 17, 2023 at 10:31:49PM -0600, Andrei Warkentin wrote: > > The TimerDxe implementation doesn't account for the physical > > time passed due to timer handler execution or (perhaps even > > more importantly) time spent with interrupts masked. > > > > Other implementations (e.g. like the Arm one) do. If the > > timer tick is always incremented at a fixed rate, then > > you can slow down UEFI's perception of time by running > > long sections of code in a critical section. > > > > Cc: Sunil V L <suni...@ventanamicro.com> > > Cc: Daniel Schaefer <g...@danielschaefer.me> > > Signed-off-by: Andrei Warkentin <andrei.warken...@intel.com> > > --- > > UefiCpuPkg/CpuTimerDxeRiscV64/Timer.c | 31 ++++++++++++-------- > > 1 file changed, 18 insertions(+), 13 deletions(-) > > > > diff --git a/UefiCpuPkg/CpuTimerDxeRiscV64/Timer.c > > b/UefiCpuPkg/CpuTimerDxeRiscV64/Timer.c > > index 0ecefddf1f18..f65c64c296cd 100644 > > --- a/UefiCpuPkg/CpuTimerDxeRiscV64/Timer.c > > +++ b/UefiCpuPkg/CpuTimerDxeRiscV64/Timer.c > > @@ -41,6 +41,7 @@ STATIC EFI_TIMER_NOTIFY mTimerNotifyFunction; > > // The current period of the timer interrupt > > // > > STATIC UINT64 mTimerPeriod = 0; > > +STATIC UINT64 mLastPeriodStart = 0; > > > > /** > > Timer Interrupt Handler. > > @@ -55,26 +56,32 @@ TimerInterruptHandler ( > > IN EFI_SYSTEM_CONTEXT SystemContext > > ) > > { > > - EFI_TPL OriginalTPL; > > - UINT64 RiscvTimer; > > + EFI_TPL OriginalTPL; > > + UINT64 PeriodStart = RiscVReadTimer (); > > > > OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL); > > if (mTimerNotifyFunction != NULL) { > > - mTimerNotifyFunction (mTimerPeriod); > > + // > > + // For any number of reasons, the ticks could be coming > > + // in slower than mTimerPeriod. For example, some code > > + // is doing a *lot* of stuff inside an EFI_TPL_HIGH > > + // critical section, and this should not cause the EFI > > + // time to increment slower. So when we take an interrupt, > > + // account for the actual time passed. > > + // > > + mTimerNotifyFunction (PeriodStart - mLastPeriodStart); > > Shouldn't we consider debug case like ARM does? > Hi Andrei,
Please ignore above comment. It is actually consistent with other architectures. Thanks, Sunil -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#100438): https://edk2.groups.io/g/devel/message/100438 Mute This Topic: https://groups.io/mt/97044196/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-