]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/MpService: free the unused cpu data buffer
authorChen Fan <chen.fan.fnst@cn.fujitsu.com>
Thu, 13 Nov 2014 18:29:31 +0000 (18:29 +0000)
committerjljusten <jljusten@Edk2>
Thu, 13 Nov 2014 18:29:31 +0000 (18:29 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Reviewed-by: Jeff Fan <jeff.fan@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16367 6f19259b-4bc3-4df7-8a09-765794883524

UefiCpuPkg/CpuDxe/CpuMp.c

index 13fcda58597bf25bf622e1ce0a8e7e726f642a71..10065762a243b00c03bfcae41baaf0401da6b81d 100644 (file)
@@ -25,7 +25,7 @@ VOID *mCommonStack = 0;
 VOID *mTopOfApCommonStack = 0;\r
 VOID *mApStackStart = 0;\r
 \r
-BOOLEAN mAPsAlreadyInitFinished = FALSE;\r
+volatile BOOLEAN mAPsAlreadyInitFinished = FALSE;\r
 volatile BOOLEAN mStopCheckAllAPsStatus = TRUE;\r
 \r
 EFI_MP_SERVICES_PROTOCOL  mMpServicesTemplate = {\r
@@ -1135,11 +1135,15 @@ ProcessorToIdleState (
   EFI_AP_PROCEDURE      Procedure;\r
   VOID                  *ProcedureArgument;\r
 \r
+  AsmApDoneWithCommonStack ();\r
+\r
+  while (!mAPsAlreadyInitFinished) {\r
+    CpuPause ();\r
+  }\r
+\r
   WhoAmI (&mMpServicesTemplate, &ProcessorNumber);\r
   CpuData = &mMpSystemData.CpuDatas[ProcessorNumber];\r
 \r
-  AsmApDoneWithCommonStack ();\r
-\r
   //\r
   // Avoid forcibly reset AP caused the AP State is not updated.\r
   //\r
@@ -1486,6 +1490,11 @@ InitializeMpSupport (
     return;\r
   }\r
 \r
+  mMpSystemData.CpuDatas = ReallocatePool (\r
+                             sizeof (CPU_DATA_BLOCK) * gMaxLogicalProcessorNumber,\r
+                             sizeof (CPU_DATA_BLOCK) * mMpSystemData.NumberOfProcessors,\r
+                             mMpSystemData.CpuDatas);\r
+\r
   mAPsAlreadyInitFinished = TRUE;\r
 \r
   if (mMpSystemData.NumberOfProcessors < gMaxLogicalProcessorNumber) {\r