X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FPiSmmCpuDxeSmm%2FMpService.c;fp=UefiCpuPkg%2FPiSmmCpuDxeSmm%2FMpService.c;h=305bffa9bcfd1645e1ddee4ea71b4311dfb7ed11;hp=93cac5e4fa93235e5d294ea65055bca98e8ed69b;hb=d84f090fd7629d026a70d592a7be081d1447357d;hpb=3fdc47c65bba3fbbec96b5c8c8b7615dfefa9d42 diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c index 93cac5e4fa..305bffa9bc 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c @@ -441,7 +441,6 @@ ResetTokens ( ProcToken = PROCEDURE_TOKEN_FROM_LINK (Link); ProcToken->RunningApCount = 0; - ProcToken->Used = FALSE; // // Check the spinlock status and release it if not released yet. @@ -1049,10 +1048,13 @@ IsTokenInUse ( } Link = GetFirstNode (&gSmmCpuPrivate->TokenList); - while (!IsNull (&gSmmCpuPrivate->TokenList, Link)) { + // + // Only search used tokens. + // + while (Link != gSmmCpuPrivate->FirstFreeToken) { ProcToken = PROCEDURE_TOKEN_FROM_LINK (Link); - if (ProcToken->Used && ProcToken->SpinLock == Token) { + if (ProcToken->SpinLock == Token) { return TRUE; } @@ -1104,7 +1106,6 @@ AllocateTokenBuffer ( ProcTokens[Index].Signature = PROCEDURE_TOKEN_SIGNATURE; ProcTokens[Index].SpinLock = SpinLock; - ProcTokens[Index].Used = FALSE; ProcTokens[Index].RunningApCount = 0; InsertTailList (&gSmmCpuPrivate->TokenList, &ProcTokens[Index].Link); @@ -1140,7 +1141,6 @@ GetFreeToken ( NewToken = PROCEDURE_TOKEN_FROM_LINK (gSmmCpuPrivate->FirstFreeToken); gSmmCpuPrivate->FirstFreeToken = GetNextNode (&gSmmCpuPrivate->TokenList, gSmmCpuPrivate->FirstFreeToken); - NewToken->Used = TRUE; NewToken->RunningApCount = RunningApsCount; AcquireSpinLock (NewToken->SpinLock);