Add AsmHltLoop () in assembly code, it will not be copied into AP wakeup
buffer and invoked at end of ApCFunction (). To make sure AP work in case
AP wakeup buffer is restored to original data.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <jeff....@intel.com>
CC: Feng Tian <feng.t...@intel.com>
CC: Jiewen Yao <jiewen....@intel.com>
CC: Michael Kinney <michael.d.kin...@intel.com>
---
 UefiCpuPkg/CpuMpPei/CpuMpPei.c        | 1 +
 UefiCpuPkg/CpuMpPei/CpuMpPei.h        | 9 +++++++++
 UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm  | 6 ++++++
 UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm | 6 ++++++
 UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm   | 6 ++++++
 UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm  | 6 ++++++
 6 files changed, 34 insertions(+)

diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
index 7b75d35..40e62e0 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
@@ -169,6 +169,7 @@ ApCFunction (
   //
   InterlockedIncrement ((UINT32 *)&PeiCpuMpData->FinishedCount);
 
+  AsmCliHltLoop ();
 }
 
 /**
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
index 97d52bf..c241349 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
@@ -166,6 +166,15 @@ AsmInitializeGdt (
   IN IA32_DESCRIPTOR  *Gdtr
   );
 
+/**
+  Assembly code to do CLI-HALT loop.
+
+**/
+VOID
+EFIAPI
+AsmCliHltLoop (
+  VOID
+  );
 
 /**
   This function will be called by BSP to wakeup AP.
diff --git a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm 
b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
index 63c8048..060f467 100644
--- a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
+++ b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.asm
@@ -144,6 +144,12 @@ CProcedureInvoke:
 RendezvousFunnelProc   ENDP
 RendezvousFunnelProcEnd::
 
+AsmCliHltLoop PROC near C PUBLIC
+    cli
+    hlt
+    jmp        $-2
+AsmCliHltLoop ENDP
+
 
;-------------------------------------------------------------------------------------
 ;  AsmGetAddressMap (&AddressMap);
 
;-------------------------------------------------------------------------------------
diff --git a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm 
b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
index fe45cf1..3a8e91f 100644
--- a/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
+++ b/UefiCpuPkg/CpuMpPei/Ia32/MpFuncs.nasm
@@ -132,6 +132,12 @@ CProcedureInvoke:
     jmp        $                 ; never reach here
 RendezvousFunnelProcEnd:
 
+global ASM_PFX(AsmCliHltLoop)
+ASM_PFX(AsmCliHltLoop):
+    cli
+    hlt
+    jmp        $-2
+
 
;-------------------------------------------------------------------------------------
 ;  AsmGetAddressMap (&AddressMap);
 
;-------------------------------------------------------------------------------------
diff --git a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm 
b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
index 6622c43..18c8b72 100644
--- a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
+++ b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.asm
@@ -181,6 +181,12 @@ CProcedureInvoke:
 RendezvousFunnelProc   ENDP
 RendezvousFunnelProcEnd::
 
+AsmCliHltLoop PROC
+    cli
+    hlt
+    jmp $-2
+AsmCliHltLoop ENDP
+
 
;-------------------------------------------------------------------------------------
 ;  AsmGetAddressMap (&AddressMap);
 
;-------------------------------------------------------------------------------------
diff --git a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm 
b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
index 8b93c0d..4683543 100644
--- a/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
+++ b/UefiCpuPkg/CpuMpPei/X64/MpFuncs.nasm
@@ -175,6 +175,12 @@ CProcedureInvoke:
 
 RendezvousFunnelProcEnd:
 
+global ASM_PFX(AsmCliHltLoop)
+ASM_PFX(AsmCliHltLoop):
+    cli
+    hlt
+    jmp $-2
+
 
;-------------------------------------------------------------------------------------
 ;  AsmGetAddressMap (&AddressMap);
 
;-------------------------------------------------------------------------------------
-- 
1.9.5.msysgit.0


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to