(MdeModulePkg\Core\Dxe\Event\Tpl.c) line 120-122 ----------------------------------------------------------------- 120 if (OldTpl >= TPL_HIGH_LEVEL && NewTpl < TPL_HIGH_LEVEL) { 121 gEfiCurrentTpl = TPL_HIGH_LEVEL; 122 } -----------------------------------------------------------------
First, the newly assigned *gEfiCurrentTpl* is never used before next re-assignment by the code that follows. Second, The "OldTpl" comes from "gEfiCurrentTpl". If "OldTpl >= TPL_HIGH_LEVEL" holds, the timer interrupt *must* have been disabled according to the semantic of TPL_HIGH_LEVEL. Since Uefi FW executes as single-threaded *strictly*, no other code will possibly visit the "gEfiCurrentTpl". So the 3 lines of code should be redundant. Contributed-under: TianoCore Contribution Agreement 1.1 Suggested-by: Ming Shao <ming.s...@intel.com> Signed-off-by: Ruiyu Ni <ruiyu...@intel.com> --- MdeModulePkg/Core/Dxe/Event/Tpl.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/MdeModulePkg/Core/Dxe/Event/Tpl.c b/MdeModulePkg/Core/Dxe/Event/Tpl.c index e3caf832b8..5f60fd077f 100644 --- a/MdeModulePkg/Core/Dxe/Event/Tpl.c +++ b/MdeModulePkg/Core/Dxe/Event/Tpl.c @@ -113,15 +113,6 @@ CoreRestoreTpl ( ASSERT (VALID_TPL (NewTpl)); // - // If lowering below HIGH_LEVEL, make sure - // interrupts are enabled - // - - if (OldTpl >= TPL_HIGH_LEVEL && NewTpl < TPL_HIGH_LEVEL) { - gEfiCurrentTpl = TPL_HIGH_LEVEL; - } - - // // Dispatch any pending events // while (gEventPending != 0) { @@ -131,6 +122,10 @@ CoreRestoreTpl ( } gEfiCurrentTpl = PendingTpl; + // + // If lowering below HIGH_LEVEL, make sure + // interrupts are enabled + // if (gEfiCurrentTpl < TPL_HIGH_LEVEL) { CoreSetInterruptState (TRUE); } -- 2.12.2.windows.2 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel