]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
UefiCpuPkg/PiSmmCpuDxeSmm: Remove duplicate aligned buffer on S3 path
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / MpService.c
index add770ff3cbfe0f29c2bee0017fedf093e760d17..62d037cdb17867b82a20a3c16c7dfbee9e485cf6 100644 (file)
@@ -1205,7 +1205,6 @@ InitializeSmmCpuSemaphores (
   VOID\r
   )\r
 {\r
-  UINTN                      CpuIndex;\r
   UINTN                      ProcessorCount;\r
   UINTN                      TotalSize;\r
   UINTN                      GlobalSemaphoresSize;\r
@@ -1240,7 +1239,6 @@ InitializeSmmCpuSemaphores (
   SemaphoreAddr += SemaphoreSize;\r
   mSmmCpuSemaphores.SemaphoreGlobal.CodeAccessCheckLock\r
                                                   = (SPIN_LOCK *)SemaphoreAddr;\r
-\r
   SemaphoreAddr = (UINTN)SemaphoreBlock + GlobalSemaphoresSize;\r
   mSmmCpuSemaphores.SemaphoreCpu.Busy    = (SPIN_LOCK *)SemaphoreAddr;\r
   SemaphoreAddr += ProcessorCount * SemaphoreSize;\r
@@ -1254,21 +1252,9 @@ InitializeSmmCpuSemaphores (
         ((UINTN)SemaphoreBlock + Pages * SIZE_4KB - SemaphoreAddr) / SemaphoreSize;\r
   ASSERT (mSmmCpuSemaphores.SemaphoreMsr.AvailableCounter >= MSR_SPIN_LOCK_INIT_NUM);\r
 \r
-  mSmmMpSyncData->Counter       = mSmmCpuSemaphores.SemaphoreGlobal.Counter;\r
-  mSmmMpSyncData->InsideSmm     = mSmmCpuSemaphores.SemaphoreGlobal.InsideSmm;\r
-  mSmmMpSyncData->AllCpusInSync = mSmmCpuSemaphores.SemaphoreGlobal.AllCpusInSync;\r
   mPFLock                       = mSmmCpuSemaphores.SemaphoreGlobal.PFLock;\r
   mConfigSmmCodeAccessCheckLock = mSmmCpuSemaphores.SemaphoreGlobal.CodeAccessCheckLock;\r
 \r
-  for (CpuIndex = 0; CpuIndex < ProcessorCount; CpuIndex ++) {\r
-    mSmmMpSyncData->CpuData[CpuIndex].Busy    =\r
-      (SPIN_LOCK *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Busy + SemaphoreSize * CpuIndex);\r
-    mSmmMpSyncData->CpuData[CpuIndex].Run     =\r
-      (UINT32 *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Run + SemaphoreSize * CpuIndex);\r
-    mSmmMpSyncData->CpuData[CpuIndex].Present =\r
-      (BOOLEAN *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Present + SemaphoreSize * CpuIndex);\r
-  }\r
-\r
   mSemaphoreSize = SemaphoreSize;\r
 }\r
 \r
@@ -1282,8 +1268,10 @@ InitializeMpSyncData (
   VOID\r
   )\r
 {\r
+  UINTN                      CpuIndex;\r
+\r
   if (mSmmMpSyncData != NULL) {\r
-    ZeroMem (mSmmMpSyncData, mSmmMpSyncDataSize);\r
+    mSmmMpSyncData->SwitchBsp = FALSE;\r
     mSmmMpSyncData->CpuData = (SMM_CPU_DATA_BLOCK *)((UINT8 *)mSmmMpSyncData + sizeof (SMM_DISPATCHER_MP_SYNC_DATA));\r
     mSmmMpSyncData->CandidateBsp = (BOOLEAN *)(mSmmMpSyncData->CpuData + gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus);\r
     if (FeaturePcdGet (PcdCpuSmmEnableBspElection)) {\r
@@ -1294,7 +1282,23 @@ InitializeMpSyncData (
     }\r
     mSmmMpSyncData->EffectiveSyncMode = (SMM_CPU_SYNC_MODE) PcdGet8 (PcdCpuSmmSyncMode);\r
 \r
-    InitializeSmmCpuSemaphores ();\r
+    mSmmMpSyncData->Counter       = mSmmCpuSemaphores.SemaphoreGlobal.Counter;\r
+    mSmmMpSyncData->InsideSmm     = mSmmCpuSemaphores.SemaphoreGlobal.InsideSmm;\r
+    mSmmMpSyncData->AllCpusInSync = mSmmCpuSemaphores.SemaphoreGlobal.AllCpusInSync;\r
+    ASSERT (mSmmMpSyncData->Counter != NULL && mSmmMpSyncData->InsideSmm != NULL &&\r
+            mSmmMpSyncData->AllCpusInSync != NULL);\r
+    *mSmmMpSyncData->Counter       = 0;\r
+    *mSmmMpSyncData->InsideSmm     = FALSE;\r
+    *mSmmMpSyncData->AllCpusInSync = FALSE;\r
+\r
+    for (CpuIndex = 0; CpuIndex < gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus; CpuIndex ++) {\r
+      mSmmMpSyncData->CpuData[CpuIndex].Busy    =\r
+        (SPIN_LOCK *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Busy + mSemaphoreSize * CpuIndex);\r
+      mSmmMpSyncData->CpuData[CpuIndex].Run     =\r
+        (UINT32 *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Run + mSemaphoreSize * CpuIndex);\r
+      mSmmMpSyncData->CpuData[CpuIndex].Present =\r
+        (BOOLEAN *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Present + mSemaphoreSize * CpuIndex);\r
+    }\r
   }\r
 }\r
 \r
@@ -1318,6 +1322,11 @@ InitializeMpServiceData (
   UINT8                     *GdtTssTables;\r
   UINTN                     GdtTableStepSize;\r
 \r
+  //\r
+  // Allocate memory for all locks and semaphores\r
+  //\r
+  InitializeSmmCpuSemaphores ();\r
+\r
   //\r
   // Initialize mSmmMpSyncData\r
   //\r