mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/DxeMain: Fix BSP interrupts reenabled in ExitBootServices
Within function CoreExitBootServices(), this commit will move the call of: MemoryProtectionExitBootServicesCallback(); before: SaveAndSetDebugTimerInterrupt (FALSE); and gCpu->DisableInterrupt (gCpu); The reason is that, within MemoryProtectionExitBootServicesCallback(), APIs like RaiseTpl and RestoreTpl maybe called. An example will be: DebugLib (using PeiDxeDebugLibReportStatusCode instance) | v ReportStatusCodeLib (using DxeReportStatusCodeLib instance) | v Raise/RestoreTpl The call of Raise/RestoreTpl APIs will re-enable BSP interrupts. Hence, this commit refine the calling sequence to ensure BSP interrupts before leaving CoreExitBootServices(). Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
parent
a7bbe9d20b
commit
bce776a5b6
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
DXE Core Main Entry Point
|
||||
|
||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -805,6 +805,8 @@ CoreExitBootServices (
|
|||
(EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES)
|
||||
);
|
||||
|
||||
MemoryProtectionExitBootServicesCallback();
|
||||
|
||||
//
|
||||
// Disable interrupt of Debug timer.
|
||||
//
|
||||
|
@ -815,8 +817,6 @@ CoreExitBootServices (
|
|||
//
|
||||
gCpu->DisableInterrupt (gCpu);
|
||||
|
||||
MemoryProtectionExitBootServicesCallback();
|
||||
|
||||
//
|
||||
// Clear the non-runtime values of the EFI System Table
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue