when gBS->ExitBootServices() is called, the APs should avoid
 to access the unsafed buff datas which were allocated by boot services.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <[email protected]>
Tested-by: Gabriel Somlo <[email protected]>
---
 UefiCpuPkg/CpuDxe/CpuDxe.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c
index c9df4e1..7303e85 100644
--- a/UefiCpuPkg/CpuDxe/CpuDxe.c
+++ b/UefiCpuPkg/CpuDxe/CpuDxe.c
@@ -24,6 +24,8 @@ BOOLEAN                   mIsFlushingGCD;
 UINT64                    mValidMtrrAddressMask = MTRR_LIB_CACHE_VALID_ADDRESS;
 UINT64                    mValidMtrrBitsMask    = MTRR_LIB_MSR_VALID_MASK;
 
+EFI_EVENT                 mExitBootServicesEvent = (EFI_EVENT)NULL;
+
 FIXED_MTRR    mFixedMtrrTable[] = {
   {
     MTRR_LIB_IA32_MTRR_FIX64K_00000,
@@ -826,6 +828,28 @@ IdleLoopEventCallback (
   CpuSleep ();
 }
 
+/**
+  Callback function for ExitBootServices.
+
+  @param  Event                 Event whose notification function is being 
invoked.
+  @param  Context               The pointer to the notification function's 
context,
+                                which is implementation-dependent.
+
+**/
+VOID
+EFIAPI
+ExitBootServicesCallback (
+  IN EFI_EVENT                Event,
+  IN VOID                     *Context
+  )
+{
+  //
+  // Avoid APs access invalid buff datas which allocated by Boot Services,
+  // so we send INIT IPI to APs to let them wait for SIPI state.
+  //
+  SendInitIpiAllExcludingSelf ();
+}
+
 
 /**
   Initialize the state information for the CPU Architectural Protocol.
@@ -900,6 +924,15 @@ InitializeCpu (
 
   InitializeMpSupport ();
 
+  Status = gBS->CreateEvent (
+                  EVT_SIGNAL_EXIT_BOOT_SERVICES,
+                  TPL_CALLBACK,
+                  ExitBootServicesCallback,
+                  NULL,
+                  &mExitBootServicesEvent
+                  );
+  ASSERT_EFI_ERROR (Status);
+
   return Status;
 }
 
-- 
1.9.3


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to