CpuDxe driver uses a global C variable to record the interrupt state. The state variable is updated every time CpuArch.EnableInterrupt() or CpuArch.DisableInterrupt() is called. CpuArch.GetInterruptState() simply returns the state variable.
But when CpuArch.GetInterruptState() is called in the interrupt context, even the interrupt state is enabled before interrupt happens, because the interrupt is not disabled through CpuArch.DisableInterrupts(), CpuArch.GetInterruptState() still returns that the interrupt state is enabled. It's not correct. The commit removes the C global variable and always reads the interrupt state from CPU register. Signed-off-by: Ray Ni <ray...@intel.com> Cc: Laszlo Ersek <ler...@redhat.com> Cc: Rahul Kumar <rahul1.ku...@intel.com> Cc: Gerd Hoffmann <kra...@redhat.com> --- UefiCpuPkg/CpuDxe/CpuDxe.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c index bf03978710..0349c761ff 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.c +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c @@ -15,8 +15,7 @@ // // Global Variables // -BOOLEAN InterruptState = FALSE; -EFI_HANDLE mCpuHandle = NULL; +EFI_HANDLE mCpuHandle = NULL; BOOLEAN mIsFlushingGCD; BOOLEAN mIsAllocatingPageTable = FALSE; UINT64 mTimerPeriod = 0; @@ -89,8 +88,6 @@ CpuEnableInterrupt ( ) { EnableInterrupts (); - - InterruptState = TRUE; return EFI_SUCCESS; } @@ -110,8 +107,6 @@ CpuDisableInterrupt ( ) { DisableInterrupts (); - - InterruptState = FALSE; return EFI_SUCCESS; } @@ -136,7 +131,8 @@ CpuGetInterruptState ( return EFI_INVALID_PARAMETER; } - *State = InterruptState; + *State = GetInterruptState (); + return EFI_SUCCESS; } -- 2.39.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116166): https://edk2.groups.io/g/devel/message/116166 Mute This Topic: https://groups.io/mt/104642316/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-