UefiCpuPkg/MpService: free the unused cpu data buffer

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
This commit is contained in:
Chen Fan 2014-11-13 18:29:31 +00:00 committed by jljusten
parent ac9dbb3b03
commit 232eb4c826
1 changed files with 12 additions and 3 deletions

View File

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