Reviewed-by: Jeff Fan <[email protected]>

-----Original Message-----
From: Kinney, Michael D 
Sent: Wednesday, December 23, 2015 7:51 AM
To: [email protected]
Cc: Fan, Jeff
Subject: [Patch] UefiCpuPkg/PiSmmCpuDxeSmm: Fix failure when PcdCpuSmmDebug is 
TRUE

If PcdCpuSmmDebug is set to TRUE, then the first time the function 
CpuSmmDebugEntry () is called during the first normal SMI, the registers DR6 or 
DR7 may be set to invalid values due to gSmst not being fully initialized yet.  
Instead, use gSmmCpuPrivate that is fully initialized for the first SMI to look 
up CpuSaveState for the currently executing CPU.

Cc: Jeff Fan <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <[email protected]>
---
 UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index 620b013..79b7c90 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -943,7 +943,7 @@ SmmStartupThisAp (
 }
 
 /**
-  This funciton sets DR6 & DR7 according to SMM save state, before running SMM 
C code.
+  This function sets DR6 & DR7 according to SMM save state, before running SMM 
C code.
   They are useful when you want to enable hardware breakpoints in SMM without 
entry SMM mode.
 
   NOTE: It might not be appreciated in runtime since it might @@ -961,7 +961,7 
@@ CpuSmmDebugEntry (
   SMRAM_SAVE_STATE_MAP *CpuSaveState;
   
   if (FeaturePcdGet (PcdCpuSmmDebug)) {
-    CpuSaveState = (SMRAM_SAVE_STATE_MAP *)gSmst->CpuSaveState[CpuIndex];
+    CpuSaveState = (SMRAM_SAVE_STATE_MAP 
+ *)gSmmCpuPrivate->CpuSaveState[CpuIndex];
     if (mSmmSaveStateRegisterLma == EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT) {
       AsmWriteDr6 (CpuSaveState->x86._DR6);
       AsmWriteDr7 (CpuSaveState->x86._DR7); @@ -973,7 +973,7 @@ 
CpuSmmDebugEntry (  }
 
 /**
-  This funciton restores DR6 & DR7 to SMM save state.
+  This function restores DR6 & DR7 to SMM save state.
 
   NOTE: It might not be appreciated in runtime since it might
         conflict with OS debugging facilities. Turn them off in RELEASE.
@@ -990,7 +990,7 @@ CpuSmmDebugExit (
   SMRAM_SAVE_STATE_MAP *CpuSaveState;
 
   if (FeaturePcdGet (PcdCpuSmmDebug)) {
-    CpuSaveState = (SMRAM_SAVE_STATE_MAP *)gSmst->CpuSaveState[CpuIndex];
+    CpuSaveState = (SMRAM_SAVE_STATE_MAP 
+ *)gSmmCpuPrivate->CpuSaveState[CpuIndex];
     if (mSmmSaveStateRegisterLma == EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT) {
       CpuSaveState->x86._DR7 = (UINT32)AsmReadDr7 ();
       CpuSaveState->x86._DR6 = (UINT32)AsmReadDr6 ();
--
2.6.3.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to