Reviewed-by: Feng Tian <[email protected]>

Thanks
Feng

-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of Michael 
Kinney
Sent: Wednesday, July 20, 2016 7:38 AM
To: [email protected]
Cc: Tian, Feng <[email protected]>; Laszlo Ersek <[email protected]>; Fan, 
Jeff <[email protected]>
Subject: [edk2] [Patch V2] UefiCpuPkg/PiSmmCpuDxeSmm: SMM_CPU_DATA_BLOCK is not 
cleared

From: Jeff Fan <[email protected]>

The commit 8b9311 changed the zeroing of mSmmMpSyncData of type 
SMM_DISPATCHER_MP_SYNC_DATA by the following patch.
 -    ZeroMem (mSmmMpSyncData, mSmmMpSyncDataSize);
 +    mSmmMpSyncData->SwitchBsp = FALSE;

mSmmMpSyncDataSize not only includes SMM_DISPATCHER_MP_SYNC_DATA, but also 
includes the SMM_CPU_DATA_BLOCK array and one BOOLEAN variable array as shown 
here:

  mSmmMpSyncDataSize = sizeof (SMM_DISPATCHER_MP_SYNC_DATA) +
       (sizeof (SMM_CPU_DATA_BLOCK) + sizeof (BOOLEAN)) *
       gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus;

This patch restores the original ZeroMem() to clear all CPU Sync data.
The commit 8b9311 may cause unexpected behavior.

v2:
  Mentioned CandidateBsp array in comments to make it more accurate.

Cc: Laszlo Ersek <[email protected]>
Cc: Feng Tian <[email protected]>
Cc: Michael Kinney <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <[email protected]>
Reviewed-by: Feng Tian <[email protected]>
---
 UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index 5ba0514..12466ef 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -1276,7 +1276,11 @@ InitializeMpSyncData (
   UINTN                      CpuIndex;
 
   if (mSmmMpSyncData != NULL) {
-    mSmmMpSyncData->SwitchBsp = FALSE;
+    //
+    // mSmmMpSyncDataSize includes one structure of 
SMM_DISPATCHER_MP_SYNC_DATA, one
+    // CpuData array of SMM_CPU_DATA_BLOCK and one CandidateBsp array of 
BOOLEAN.
+    //
+    ZeroMem (mSmmMpSyncData, mSmmMpSyncDataSize);
     mSmmMpSyncData->CpuData = (SMM_CPU_DATA_BLOCK *)((UINT8 *)mSmmMpSyncData + 
sizeof (SMM_DISPATCHER_MP_SYNC_DATA));
     mSmmMpSyncData->CandidateBsp = (BOOLEAN *)(mSmmMpSyncData->CpuData + 
gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus);
     if (FeaturePcdGet (PcdCpuSmmEnableBspElection)) {
--
2.6.3.windows.1

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

Reply via email to