Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan <chen.fan.f...@cn.fujitsu.com> --- UefiCpuPkg/CpuDxe/CpuMp.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-)
diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 6fcafc2..7f6312c 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b/UefiCpuPkg/CpuDxe/CpuMp.c @@ -632,6 +632,11 @@ StartupAllAPs ( return EFI_INVALID_PARAMETER; } + // + // temporarily stop checkAllAPsStatus for avoid resource dead-lock. + // + mStopCheckAllAPsStatus = TRUE; + for (Number = 0; Number < mMpSystemData.NumberOfProcessors; Number++) { CpuData = &mMpSystemData.CpuDatas[Number]; if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT)) { @@ -653,11 +658,6 @@ StartupAllAPs ( } } - // - // temporarily stop checkAllAPsStatus for initialize parameters. - // - mStopCheckAllAPsStatus = TRUE; - mMpSystemData.Procedure = Procedure; mMpSystemData.ProcedureArgument = ProcedureArgument; mMpSystemData.WaitEvent = WaitEvent; @@ -716,6 +716,11 @@ StartupAllAPs ( return EFI_SUCCESS; } + // + // Blocking temporarily stop CheckAllAPsStatus() + // + mStopCheckAllAPsStatus = TRUE; + while (TRUE) { CheckAndUpdateAllAPsToIdleState (); if (mMpSystemData.FinishCount == mMpSystemData.StartCount) { @@ -859,6 +864,12 @@ StartupThisAP ( return EFI_NOT_FOUND; } + // + // temporarily stop checkAllAPsStatus for avoiding resource dead-lock. + // + mStopCheckAllAPsStatus = TRUE; + + CpuData = &mMpSystemData.CpuDatas[ProcessorNumber]; if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT)) { return EFI_INVALID_PARAMETER; @@ -868,11 +879,6 @@ StartupThisAP ( return EFI_NOT_READY; } - // - // temporarily stop checkAllAPsStatus for initialize parameters. - // - mStopCheckAllAPsStatus = TRUE; - SetApState (CpuData, CpuStateReady); SetApProcedure (CpuData, Procedure, ProcedureArgument); @@ -1295,20 +1301,6 @@ CheckAllAPsStatus ( // for (Number = 0; Number < mMpSystemData.NumberOfProcessors; Number++) { CpuData = &mMpSystemData.CpuDatas[Number]; - if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT)) { - // - // Skip BSP - // - continue; - } - - if (!TestCpuStatusFlag (CpuData, PROCESSOR_ENABLED_BIT)) { - // - // Skip Disabled processors - // - continue; - } - if (CpuData->WaitEvent) { CheckThisAPStatus (NULL, (VOID *)CpuData); } -- 1.9.3 ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel