{\r
CPU_DATA_BLOCK *CpuData;\r
UINTN Number;\r
+ EFI_STATUS Status;\r
\r
if (mMpSystemData.TimeoutActive) {\r
mMpSystemData.Timeout -= gPollInterval;\r
return;\r
}\r
\r
+ //\r
+ // avoid next timer enter.\r
+ //\r
+ Status = gBS->SetTimer (\r
+ mMpSystemData.CheckAllAPsEvent,\r
+ TimerCancel,\r
+ 0\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
if (mMpSystemData.WaitEvent != NULL) {\r
CheckAndUpdateAllAPsToIdleState ();\r
//\r
}\r
\r
if (mMpSystemData.FinishCount != mMpSystemData.StartCount) {\r
- return;\r
+ goto EXIT;\r
}\r
\r
mMpSystemData.TimeoutActive = FALSE;\r
gBS->SignalEvent (mMpSystemData.WaitEvent);\r
mMpSystemData.WaitEvent = NULL;\r
mStopCheckAllAPsStatus = TRUE;\r
+\r
+ goto EXIT;\r
}\r
\r
//\r
CheckThisAPStatus (NULL, (VOID *)CpuData);\r
}\r
}\r
+\r
+EXIT:\r
+ Status = gBS->SetTimer (\r
+ mMpSystemData.CheckAllAPsEvent,\r
+ TimerPeriodic,\r
+ EFI_TIMER_PERIOD_MICROSECONDS (100)\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
\r
/**\r