From nobody Mon May 6 01:00:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+52503+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+52503+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1577088642; cv=none; d=zohomail.com; s=zohoarc; b=KGL++U/utVNO7WgzZbt6XZoIaEYIbxMTe2ECuRxhbHlFSepTc0KEUJ4lssG8JA4XfdlLgTUING+UeeMbhJMmDmU/5yNMDHKjH3RNzxrsZmHy+aqeTM5AOHN6qwNy4surtMq8nL1LpmdgqqeEaoBr77gNOaaAFMdI3Ejnw54/Ktw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1577088642; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=hRfeJmdWE8T7rSya0ovqxnXEaRxD2L1hgTwIHjyS7ss=; b=Tnlct6CxCgcqpYMnFav6T8NZiJqNaFS1MjzkiXJu/k1nIXaXJfuOaFvg1c+Piafm3kioJzGtDJatRDKx1S5JMSyl/3izbOSrEhcKIE5nlLxI5MLbBG3l1k7CSGw6eR+X9IkGcwJAX4otvuhyDVhvv52jJ5oatYTq3hFd5zpIBo8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+52503+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1577088642325618.6448021686065; Mon, 23 Dec 2019 00:10:42 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id L9iFYY1788612xb2ACGPQq1k; Mon, 23 Dec 2019 00:10:41 -0800 X-Received: from mga04.intel.com (mga04.intel.com []) by mx.groups.io with SMTP id smtpd.web11.769.1577088640334442260 for ; Mon, 23 Dec 2019 00:10:41 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Dec 2019 00:10:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,346,1571727600"; d="scan'208";a="214172791" X-Received: from ydong10-desktop.ccr.corp.intel.com ([10.239.158.133]) by fmsmga008.fm.intel.com with ESMTP; 23 Dec 2019 00:10:40 -0800 From: "Dong, Eric" To: devel@edk2.groups.io Cc: Ray Ni , Laszlo Ersek Subject: [edk2-devel] [PATCH v3 1/2] UefiCpuPkg/PiSmmCpuDxeSmm: Remove dependence between APs Date: Mon, 23 Dec 2019 16:10:36 +0800 Message-Id: <20191223081037.1565-2-eric.dong@intel.com> In-Reply-To: <20191223081037.1565-1-eric.dong@intel.com> References: <20191223081037.1565-1-eric.dong@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,eric.dong@intel.com X-Gm-Message-State: 8omAUfWo6O88aikjWi5WHIrkx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1577088641; bh=wCCzfIGMuYNCYD9+S34V3Xd3+gZQItsYO78gGlmfP6o=; h=Cc:Date:From:Reply-To:Subject:To; b=cnShtvyZ5fuito/hCIwcD0ldeopGJMZxgsxuYmZHK2i7PXiD/IvoN4MnNLFLYvyOv9A H3TDMg8dscE67l4rmFGanljyYpT20tW95M6oBG8ml8QR8o/ukwBlR1r0TSmJVuVUP47yZ FTdW0FEfO659NN1Tzqot2vuK/f+bl9v9mJU= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2268 In current implementation, when check whether APs called by StartUpAllAPs or StartUpThisAp, it checks the Tokens value used by other APs. Also the AP will update the Token value for itself if its task finished. In this case, the potential race condition issues happens for the tokens. Because of this, system may trig ASSERT during cycling test. This change enhance the code logic, add new attributes for the token to remove the reference for the tokens belongs to other APs. Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Eric Dong Reviewed-by: Ray Ni --- UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 125 +++++++-------------- UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h | 5 +- 2 files changed, 45 insertions(+), 85 deletions(-) diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxe= Smm/MpService.c index 757f1056f7..35951cc43e 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c @@ -402,38 +402,6 @@ IsPresentAp ( *(mSmmMpSyncData->CpuData[CpuIndex].Present)); } =20 -/** - Check whether execute in single AP or all APs. - - Compare two Tokens used by different APs to know whether in StartAllAps = call. - - Whether is an valid AP base on AP's Present flag. - - @retval TRUE IN StartAllAps call. - @retval FALSE Not in StartAllAps call. - -**/ -BOOLEAN -InStartAllApsCall ( - VOID - ) -{ - UINTN ApIndex; - UINTN ApIndex2; - - for (ApIndex =3D mMaxNumberOfCpus; ApIndex-- > 0;) { - if (IsPresentAp (ApIndex) && (mSmmMpSyncData->CpuData[ApIndex].Token != =3D NULL)) { - for (ApIndex2 =3D ApIndex; ApIndex2-- > 0;) { - if (IsPresentAp (ApIndex2) && (mSmmMpSyncData->CpuData[ApIndex2].T= oken !=3D NULL)) { - return mSmmMpSyncData->CpuData[ApIndex2].Token =3D=3D mSmmMpSync= Data->CpuData[ApIndex].Token; - } - } - } - } - - return FALSE; -} - /** Clean up the status flags used during executing the procedure. =20 @@ -445,40 +413,15 @@ ReleaseToken ( IN UINTN CpuIndex ) { - UINTN Index; - BOOLEAN Released; + PROCEDURE_TOKEN *Token; =20 - if (InStartAllApsCall ()) { - // - // In Start All APs mode, make sure all APs have finished task. - // - if (WaitForAllAPsNotBusy (FALSE)) { - // - // Clean the flags update in the function call. - // - Released =3D FALSE; - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { - // - // Only In SMM APs need to be clean up. - // - if (mSmmMpSyncData->CpuData[Index].Present && mSmmMpSyncData->CpuD= ata[Index].Token !=3D NULL) { - if (!Released) { - ReleaseSpinLock (mSmmMpSyncData->CpuData[Index].Token); - Released =3D TRUE; - } - mSmmMpSyncData->CpuData[Index].Token =3D NULL; - } - } - } - } else { - // - // In single AP mode. - // - if (mSmmMpSyncData->CpuData[CpuIndex].Token !=3D NULL) { - ReleaseSpinLock (mSmmMpSyncData->CpuData[CpuIndex].Token); - mSmmMpSyncData->CpuData[CpuIndex].Token =3D NULL; - } + Token =3D mSmmMpSyncData->CpuData[CpuIndex].Token; + + if (InterlockedDecrement (&Token->RunningApCount) =3D=3D 0) { + ReleaseSpinLock (Token->SpinLock); } + + mSmmMpSyncData->CpuData[CpuIndex].Token =3D NULL; } =20 /** @@ -912,12 +855,14 @@ APHandler ( *mSmmMpSyncData->CpuData[CpuIndex].Status =3D ProcedureStatus; } =20 + if (mSmmMpSyncData->CpuData[CpuIndex].Token !=3D NULL) { + ReleaseToken (CpuIndex); + } + // // Release BUSY // ReleaseSpinLock (mSmmMpSyncData->CpuData[CpuIndex].Busy); - - ReleaseToken (CpuIndex); } =20 if (SmmCpuFeaturesNeedConfigureMtrrs()) { @@ -1111,7 +1056,7 @@ IsTokenInUse ( while (!IsNull (&gSmmCpuPrivate->TokenList, Link)) { ProcToken =3D PROCEDURE_TOKEN_FROM_LINK (Link); =20 - if (ProcToken->ProcedureToken =3D=3D Token) { + if (ProcToken->SpinLock =3D=3D Token) { return TRUE; } =20 @@ -1124,16 +1069,18 @@ IsTokenInUse ( /** create token and save it to the maintain list. =20 + @param RunningApCount Input running AP count. + @retval return the spin lock used as token. =20 **/ -SPIN_LOCK * +PROCEDURE_TOKEN * CreateToken ( - VOID + IN UINT32 RunningApCount ) { PROCEDURE_TOKEN *ProcToken; - SPIN_LOCK *CpuToken; + SPIN_LOCK *SpinLock; UINTN SpinLockSize; TOKEN_BUFFER *TokenBuf; UINT32 TokenCountPerChunk; @@ -1160,20 +1107,21 @@ CreateToken ( gSmmCpuPrivate->UsedTokenNum =3D 0; } =20 - CpuToken =3D (SPIN_LOCK *)(gSmmCpuPrivate->CurrentTokenBuf + SpinLockSiz= e * gSmmCpuPrivate->UsedTokenNum); + SpinLock =3D (SPIN_LOCK *)(gSmmCpuPrivate->CurrentTokenBuf + SpinLockSiz= e * gSmmCpuPrivate->UsedTokenNum); gSmmCpuPrivate->UsedTokenNum++; =20 - InitializeSpinLock (CpuToken); - AcquireSpinLock (CpuToken); + InitializeSpinLock (SpinLock); + AcquireSpinLock (SpinLock); =20 ProcToken =3D AllocatePool (sizeof (PROCEDURE_TOKEN)); ASSERT (ProcToken !=3D NULL); ProcToken->Signature =3D PROCEDURE_TOKEN_SIGNATURE; - ProcToken->ProcedureToken =3D CpuToken; + ProcToken->SpinLock =3D SpinLock; + ProcToken->RunningApCount =3D RunningApCount; =20 InsertTailList (&gSmmCpuPrivate->TokenList, &ProcToken->Link); =20 - return CpuToken; + return ProcToken; } =20 /** @@ -1246,6 +1194,8 @@ InternalSmmStartupThisAp ( IN OUT EFI_STATUS *CpuStatus ) { + PROCEDURE_TOKEN *ProcToken; + if (CpuIndex >=3D gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus) { DEBUG((DEBUG_ERROR, "CpuIndex(%d) >=3D gSmmCpuPrivate->SmmCoreEntryCon= text.NumberOfCpus(%d)\n", CpuIndex, gSmmCpuPrivate->SmmCoreEntryContext.Num= berOfCpus)); return EFI_INVALID_PARAMETER; @@ -1278,14 +1228,12 @@ InternalSmmStartupThisAp ( =20 AcquireSpinLock (mSmmMpSyncData->CpuData[CpuIndex].Busy); =20 - if (Token !=3D NULL) { - *Token =3D (MM_COMPLETION) CreateToken (); - } - mSmmMpSyncData->CpuData[CpuIndex].Procedure =3D Procedure; mSmmMpSyncData->CpuData[CpuIndex].Parameter =3D ProcArguments; if (Token !=3D NULL) { - mSmmMpSyncData->CpuData[CpuIndex].Token =3D (SPIN_LOCK *)(*Token); + ProcToken=3D CreateToken (1); + mSmmMpSyncData->CpuData[CpuIndex].Token =3D ProcToken; + *Token =3D (MM_COMPLETION)ProcToken->SpinLock; } mSmmMpSyncData->CpuData[CpuIndex].Status =3D CpuStatus; if (mSmmMpSyncData->CpuData[CpuIndex].Status !=3D NULL) { @@ -1343,6 +1291,7 @@ InternalSmmStartupAllAPs ( { UINTN Index; UINTN CpuCount; + PROCEDURE_TOKEN *ProcToken; =20 if ((TimeoutInMicroseconds !=3D 0) && ((mSmmMp.Attributes & EFI_MM_MP_TI= MEOUT_SUPPORTED) =3D=3D 0)) { return EFI_INVALID_PARAMETER; @@ -1371,7 +1320,10 @@ InternalSmmStartupAllAPs ( } =20 if (Token !=3D NULL) { - *Token =3D (MM_COMPLETION) CreateToken (); + ProcToken =3D CreateToken ((UINT32)mMaxNumberOfCpus); + *Token =3D (MM_COMPLETION)ProcToken->SpinLock; + } else { + ProcToken =3D NULL; } =20 // @@ -1391,8 +1343,8 @@ InternalSmmStartupAllAPs ( if (IsPresentAp (Index)) { mSmmMpSyncData->CpuData[Index].Procedure =3D (EFI_AP_PROCEDURE2) Pro= cedure; mSmmMpSyncData->CpuData[Index].Parameter =3D ProcedureArguments; - if (Token !=3D NULL) { - mSmmMpSyncData->CpuData[Index].Token =3D (SPIN_LOCK *)(*Token); + if (ProcToken !=3D NULL) { + mSmmMpSyncData->CpuData[Index].Token =3D ProcToken; } if (CPUStatus !=3D NULL) { mSmmMpSyncData->CpuData[Index].Status =3D &CPUStatus[Index]; @@ -1408,6 +1360,13 @@ InternalSmmStartupAllAPs ( if (CPUStatus !=3D NULL) { CPUStatus[Index] =3D EFI_NOT_STARTED; } + + // + // Decrease the count to mark this processor(AP or BSP) as finished. + // + if (ProcToken !=3D NULL) { + WaitForSemaphore (&ProcToken->RunningApCount); + } } } =20 diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h b/UefiCpuPkg/PiSmmC= puDxeSmm/PiSmmCpuDxeSmm.h index 5c1a01e42b..5c98494e2c 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h @@ -212,7 +212,8 @@ typedef struct { UINTN Signature; LIST_ENTRY Link; =20 - SPIN_LOCK *ProcedureToken; + SPIN_LOCK *SpinLock; + volatile UINT32 RunningApCount; } PROCEDURE_TOKEN; =20 #define PROCEDURE_TOKEN_FROM_LINK(a) CR (a, PROCEDURE_TOKEN, Link, PROCED= URE_TOKEN_SIGNATURE) @@ -407,7 +408,7 @@ typedef struct { volatile VOID *Parameter; volatile UINT32 *Run; volatile BOOLEAN *Present; - SPIN_LOCK *Token; + PROCEDURE_TOKEN *Token; EFI_STATUS *Status; } SMM_CPU_DATA_BLOCK; =20 --=20 2.23.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#52503): https://edk2.groups.io/g/devel/message/52503 Mute This Topic: https://groups.io/mt/69227573/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Mon May 6 01:00:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+52504+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+52504+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1577088643; cv=none; d=zohomail.com; s=zohoarc; b=L9W98kYEnMAN1A52PuCMtwXU2Z4o0T07jwAHao3VegtnPbVY4s6ttuAUCnLW7MkK6cl4dM+GCylCc/sPY2GDTTs2RSMCNXAApNj+psYITEwB6tNIMgJTsqW+QAbcO3iWuLWf26TFea3diE8l0SIZQfBCmtbjwOoYyVMADvo57OM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1577088643; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=2TmjKmuNRO1cPboQrzhmO9bNWBov1bY1AAcGkR/vONc=; b=OyYZO67M4k/9azrbL6eR2vjtqj1NKlkcDhZmmh8MLN1So8Rgo0NHDWxZMxOiOYKnsdXNpjwxrX8xLsIqJH+8XfUgH1l5F5vn2eRZsvr47CMQL0bK4+aVj0jdwuqiMdHemiXa+ezNXQ0cXDdUm3V3BuoxBSxQ3f5y40lwrWYolSI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+52504+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1577088643173973.6728680915897; Mon, 23 Dec 2019 00:10:43 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id YNoiYY1788612xqNEqixW4KN; Mon, 23 Dec 2019 00:10:42 -0800 X-Received: from mga04.intel.com (mga04.intel.com []) by mx.groups.io with SMTP id smtpd.web11.769.1577088640334442260 for ; Mon, 23 Dec 2019 00:10:42 -0800 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Dec 2019 00:10:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,346,1571727600"; d="scan'208";a="214172797" X-Received: from ydong10-desktop.ccr.corp.intel.com ([10.239.158.133]) by fmsmga008.fm.intel.com with ESMTP; 23 Dec 2019 00:10:41 -0800 From: "Dong, Eric" To: devel@edk2.groups.io Cc: Ray Ni , Laszlo Ersek Subject: [edk2-devel] [PATCH v3 2/2] UefiCpuPkg/PiSmmCpuDxeSmm: Fix buffer overflow issue. Date: Mon, 23 Dec 2019 16:10:37 +0800 Message-Id: <20191223081037.1565-3-eric.dong@intel.com> In-Reply-To: <20191223081037.1565-1-eric.dong@intel.com> References: <20191223081037.1565-1-eric.dong@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,eric.dong@intel.com X-Gm-Message-State: YlXDl04hHLbHIziLrvHZGZedx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1577088642; bh=p7nnze6oJLGYvs5bPDg29k+OEn1AxtYl7vw4eBhB3S8=; h=Cc:Date:From:Reply-To:Subject:To; b=avKXMQYoXG2mEvNIsn3mW9qDLDTHQKdv/9/DYow/24nsiZL1KRRz8d33/dNTAFGWYLe /HqXIptokdHiMDtObBBKB5wwWe/jEClkufnqZyh2T/YKSlnfUPj/LO/gpAepYo35sGvfp cOWN/b6lFkDSiA1+xM9idE1W0DRIL15JTXI= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The size for the array of mSmmMpSyncData->CpuData[] is 0 ~ mMaxNumberOfCpus -1. But current code may use mSmmMpSyncData->CpuData[mMaxNumberOfCpus]. This patch fixed this issue. Reviewed-by: Ray Ni Cc: Laszlo Ersek Signed-off-by: Eric Dong --- UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxe= Smm/MpService.c index 35951cc43e..4808045f71 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c @@ -137,7 +137,7 @@ ReleaseAllAPs ( { UINTN Index; =20 - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (IsPresentAp (Index)) { ReleaseSemaphore (mSmmMpSyncData->CpuData[Index].Run); } @@ -170,7 +170,7 @@ AllCpusInSmmWithExceptions ( =20 CpuData =3D mSmmMpSyncData->CpuData; ProcessorInfo =3D gSmmCpuPrivate->ProcessorInfo; - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (!(*(CpuData[Index].Present)) && ProcessorInfo[Index].ProcessorId != =3D INVALID_APIC_ID) { if (((Exceptions & ARRIVAL_EXCEPTION_DELAYED) !=3D 0) && SmmCpuFeatu= resGetSmmRegister (Index, SmmRegSmmDelayed) !=3D 0) { continue; @@ -305,7 +305,7 @@ SmmWaitForApArrival ( // // Send SMI IPIs to bring outside processors in // - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (!(*(mSmmMpSyncData->CpuData[Index].Present)) && gSmmCpuPrivate->= ProcessorInfo[Index].ProcessorId !=3D INVALID_APIC_ID) { SendSmiIpi ((UINT32)gSmmCpuPrivate->ProcessorInfo[Index].Processor= Id); } @@ -361,7 +361,7 @@ WaitForAllAPsNotBusy ( { UINTN Index; =20 - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { // // Ignore BSP and APs which not call in SMM. // @@ -617,7 +617,7 @@ BSPHandler ( // while (TRUE) { PresentCount =3D 0; - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (*(mSmmMpSyncData->CpuData[Index].Present)) { PresentCount ++; } @@ -1301,7 +1301,7 @@ InternalSmmStartupAllAPs ( } =20 CpuCount =3D 0; - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (IsPresentAp (Index)) { CpuCount ++; =20 @@ -1333,13 +1333,13 @@ InternalSmmStartupAllAPs ( // Here code always use AcquireSpinLock instead of AcquireSpinLockOrFail= for not // block mode. // - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (IsPresentAp (Index)) { AcquireSpinLock (mSmmMpSyncData->CpuData[Index].Busy); } } =20 - for (Index =3D mMaxNumberOfCpus; Index-- > 0;) { + for (Index =3D 0; Index < mMaxNumberOfCpus; Index++) { if (IsPresentAp (Index)) { mSmmMpSyncData->CpuData[Index].Procedure =3D (EFI_AP_PROCEDURE2) Pro= cedure; mSmmMpSyncData->CpuData[Index].Parameter =3D ProcedureArguments; --=20 2.23.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#52504): https://edk2.groups.io/g/devel/message/52504 Mute This Topic: https://groups.io/mt/69227574/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-