while (!AcquireSpinLockOrFail (&CpuData->CpuDataLock)) {\r
CpuPause ();\r
}\r
+ CpuData->LockSelf = GetApicId ();\r
}\r
\r
/**\r
WhoAmI (&mMpServicesTemplate, &ProcessorNumber);\r
CpuData = &mMpSystemData.CpuDatas[ProcessorNumber];\r
\r
+ //\r
+ // Avoid forcibly reset AP caused the AP got lock not release.\r
+ //\r
+ if (CpuData->LockSelf == (INTN) GetApicId ()) {\r
+ ReleaseSpinLock (&CpuData->CpuDataLock);\r
+ }\r
+\r
//\r
// Avoid forcibly reset AP caused the AP State is not updated.\r
//\r
CpuData->Procedure = NULL;\r
CpuData->Parameter = NULL;\r
InitializeSpinLock (&CpuData->CpuDataLock);\r
+ CpuData->LockSelf = -1;\r
\r
return EFI_SUCCESS;\r
}\r