OvmfPkg: Use NestedInterruptTplLib in nested interrupt handlers
Prevent stack underrun in the event of a timer interrupt storm in
LocalApicTimerDxe and 8254TimerDxe interrupt handlers by using the
helper functions provided by NestedInterruptTplLib.
This fixes the same problem as addressed in commit 239b50a86
("OvmfPkg: End timer interrupt later to avoid stack overflow under
load"), but does so without breaking nested timer interrupts.
Cc: Paolo Bonzini <pbonzini@redhat.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2815
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4162
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
committed by
mergify[bot]
parent
a24fbd6061
commit
a086f4a63b
@@ -6,6 +6,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include <Library/NestedInterruptTplLib.h>
|
||||
|
||||
#include "Timer.h"
|
||||
|
||||
//
|
||||
@@ -76,9 +78,10 @@ TimerInterruptHandler (
|
||||
IN EFI_SYSTEM_CONTEXT SystemContext
|
||||
)
|
||||
{
|
||||
EFI_TPL OriginalTPL;
|
||||
STATIC NESTED_INTERRUPT_STATE NestedInterruptState;
|
||||
EFI_TPL OriginalTPL;
|
||||
|
||||
OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL);
|
||||
OriginalTPL = NestedInterruptRaiseTPL ();
|
||||
|
||||
mLegacy8259->EndOfInterrupt (mLegacy8259, Efi8259Irq0);
|
||||
|
||||
@@ -89,7 +92,7 @@ TimerInterruptHandler (
|
||||
mTimerNotifyFunction (mTimerPeriod);
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OriginalTPL);
|
||||
NestedInterruptRestoreTPL (OriginalTPL, SystemContext, &NestedInterruptState);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user