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:
Michael Brown
2022-12-09 10:20:27 +00:00
committed by mergify[bot]
parent a24fbd6061
commit a086f4a63b
12 changed files with 22 additions and 6 deletions

View File

@@ -8,6 +8,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Library/NestedInterruptTplLib.h>
#include "LocalApicTimerDxe.h"
//
@@ -58,9 +60,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 ();
SendApicEoi ();
@@ -71,7 +74,7 @@ TimerInterruptHandler (
mTimerNotifyFunction (mTimerPeriod);
}
gBS->RestoreTPL (OriginalTPL);
NestedInterruptRestoreTPL (OriginalTPL, SystemContext, &NestedInterruptState);
}
/**