ProcToken = PROCEDURE_TOKEN_FROM_LINK (Link);\r
\r
ProcToken->RunningApCount = 0;\r
- ProcToken->Used = FALSE;\r
\r
//\r
// Check the spinlock status and release it if not released yet.\r
}\r
\r
Link = GetFirstNode (&gSmmCpuPrivate->TokenList);\r
- while (!IsNull (&gSmmCpuPrivate->TokenList, Link)) {\r
+ //\r
+ // Only search used tokens.\r
+ //\r
+ while (Link != gSmmCpuPrivate->FirstFreeToken) {\r
ProcToken = PROCEDURE_TOKEN_FROM_LINK (Link);\r
\r
- if (ProcToken->Used && ProcToken->SpinLock == Token) {\r
+ if (ProcToken->SpinLock == Token) {\r
return TRUE;\r
}\r
\r
\r
ProcTokens[Index].Signature = PROCEDURE_TOKEN_SIGNATURE;\r
ProcTokens[Index].SpinLock = SpinLock;\r
- ProcTokens[Index].Used = FALSE;\r
ProcTokens[Index].RunningApCount = 0;\r
\r
InsertTailList (&gSmmCpuPrivate->TokenList, &ProcTokens[Index].Link);\r
NewToken = PROCEDURE_TOKEN_FROM_LINK (gSmmCpuPrivate->FirstFreeToken);\r
gSmmCpuPrivate->FirstFreeToken = GetNextNode (&gSmmCpuPrivate->TokenList, gSmmCpuPrivate->FirstFreeToken);\r
\r
- NewToken->Used = TRUE;\r
NewToken->RunningApCount = RunningApsCount;\r
AcquireSpinLock (NewToken->SpinLock);\r
\r