return EFI_INVALID_PARAMETER;\r
}\r
\r
+ //\r
+ // temporarily stop checkAllAPsStatus for avoid resource dead-lock.\r
+ //\r
+ mStopCheckAllAPsStatus = TRUE;\r
+\r
for (Number = 0; Number < mMpSystemData.NumberOfProcessors; Number++) {\r
CpuData = &mMpSystemData.CpuDatas[Number];\r
if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT)) {\r
}\r
}\r
\r
- //\r
- // temporarily stop checkAllAPsStatus for initialize parameters.\r
- //\r
- mStopCheckAllAPsStatus = TRUE;\r
-\r
mMpSystemData.Procedure = Procedure;\r
mMpSystemData.ProcedureArgument = ProcedureArgument;\r
mMpSystemData.WaitEvent = WaitEvent;\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Blocking temporarily stop CheckAllAPsStatus()\r
+ //\r
+ mStopCheckAllAPsStatus = TRUE;\r
+\r
while (TRUE) {\r
CheckAndUpdateAllAPsToIdleState ();\r
if (mMpSystemData.FinishCount == mMpSystemData.StartCount) {\r
return EFI_NOT_FOUND;\r
}\r
\r
+ //\r
+ // temporarily stop checkAllAPsStatus for avoid resource dead-lock.\r
+ //\r
+ mStopCheckAllAPsStatus = TRUE;\r
+\r
CpuData = &mMpSystemData.CpuDatas[ProcessorNumber];\r
if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT) ||\r
!TestCpuStatusFlag (CpuData, PROCESSOR_ENABLED_BIT)) {\r
return EFI_NOT_READY;\r
}\r
\r
- //\r
- // temporarily stop checkAllAPsStatus for initialize parameters.\r
- //\r
- mStopCheckAllAPsStatus = TRUE;\r
-\r
SetApState (CpuData, CpuStateReady);\r
\r
SetApProcedure (CpuData, Procedure, ProcedureArgument);\r
)\r
{\r
CPU_DATA_BLOCK *CpuData;\r
+ BOOLEAN TempStopCheckState;\r
+\r
+ CpuData = NULL;\r
+ TempStopCheckState = FALSE;\r
\r
if (!IsBSP ()) {\r
return EFI_DEVICE_ERROR;\r
return EFI_NOT_FOUND;\r
}\r
\r
+ //\r
+ // temporarily stop checkAllAPsStatus for initialize parameters.\r
+ //\r
+ if (!mStopCheckAllAPsStatus) {\r
+ mStopCheckAllAPsStatus = TRUE;\r
+ TempStopCheckState = TRUE;\r
+ }\r
+\r
CpuData = &mMpSystemData.CpuDatas[ProcessorNumber];\r
if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT)) {\r
return EFI_INVALID_PARAMETER;\r
CpuStatusFlagOr (CpuData, (*HealthFlag & PROCESSOR_HEALTH_STATUS_BIT));\r
}\r
\r
+ if (TempStopCheckState) {\r
+ mStopCheckAllAPsStatus = FALSE;\r
+ }\r
+\r
return EFI_SUCCESS;\r
}\r
\r
//\r
for (Number = 0; Number < mMpSystemData.NumberOfProcessors; Number++) {\r
CpuData = &mMpSystemData.CpuDatas[Number];\r
- if (TestCpuStatusFlag (CpuData, PROCESSOR_AS_BSP_BIT)) {\r
- //\r
- // Skip BSP\r
- //\r
- continue;\r
- }\r
-\r
- if (!TestCpuStatusFlag (CpuData, PROCESSOR_ENABLED_BIT)) {\r
- //\r
- // Skip Disabled processors\r
- //\r
- continue;\r
- }\r
-\r
if (CpuData->WaitEvent) {\r
CheckThisAPStatus (NULL, (VOID *)CpuData);\r
}\r