From nobody Sun Apr 28 07:18:17 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1532505073124688.2240156487399; Wed, 25 Jul 2018 00:51:13 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 312EB210C1EC1; Wed, 25 Jul 2018 00:51:11 -0700 (PDT) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1F259210C1B94 for ; Wed, 25 Jul 2018 00:51:10 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jul 2018 00:51:09 -0700 Received: from ydong10-win10.ccr.corp.intel.com ([10.239.9.125]) by orsmga001.jf.intel.com with ESMTP; 25 Jul 2018 00:51:06 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,400,1526367600"; d="scan'208";a="75739872" From: Eric Dong To: edk2-devel@lists.01.org Date: Wed, 25 Jul 2018 15:50:18 +0800 Message-Id: <20180725075020.240-2-eric.dong@intel.com> X-Mailer: git-send-email 2.15.0.windows.1 In-Reply-To: <20180725075020.240-1-eric.dong@intel.com> References: <20180725075020.240-1-eric.dong@intel.com> Subject: [edk2] [Patch v3 1/3] UefiCpuPkg/MpInitLib: Remove redundant CpuStateFinished State. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Laszlo Ersek MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Current CPU state definition include CpuStateIdle and CpuStateFinished. After investigation, current code can use CpuStateIdle to replace the CpuStateFinished. It will reduce the state number and easy for maintenance. Cc: Laszlo Ersek Cc: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong Reviewed-by: Laszlo Ersek Reviewed-by: Ruiyu Ni Tested-by: Laszlo Ersek --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 18 ++++++++---------- UefiCpuPkg/Library/MpInitLib/MpLib.h | 1 - 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index c82b985943..ff09a0e9e7 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -696,7 +696,7 @@ ApWakeupFunction ( } } } - SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateFinished= ); + SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateIdle); } } =20 @@ -1352,18 +1352,17 @@ CheckThisAP ( CpuData =3D &CpuMpData->CpuData[ProcessorNumber]; =20 // - // Check the CPU state of AP. If it is CpuStateFinished, then the AP ha= s finished its task. + // Check the CPU state of AP. If it is CpuStateIdle, then the AP has fi= nished its task. // Only BSP and corresponding AP access this unit of CPU Data. This mea= ns the AP will not modify the - // value of state after setting the it to CpuStateFinished, so BSP can = safely make use of its value. + // value of state after setting the it to CpuStateIdle, so BSP can safe= ly make use of its value. // // // If the AP finishes for StartupThisAP(), return EFI_SUCCESS. // - if (GetApState(CpuData) =3D=3D CpuStateFinished) { + if (GetApState(CpuData) =3D=3D CpuStateIdle) { if (CpuData->Finished !=3D NULL) { *(CpuData->Finished) =3D TRUE; } - SetApState (CpuData, CpuStateIdle); return EFI_SUCCESS; } else { // @@ -1420,14 +1419,13 @@ CheckAllAPs ( =20 CpuData =3D &CpuMpData->CpuData[ProcessorNumber]; // - // Check the CPU state of AP. If it is CpuStateFinished, then the AP h= as finished its task. + // Check the CPU state of AP. If it is CpuStateIdle, then the AP has f= inished its task. // Only BSP and corresponding AP access this unit of CPU Data. This me= ans the AP will not modify the - // value of state after setting the it to CpuStateFinished, so BSP can= safely make use of its value. + // value of state after setting the it to CpuStateIdle, so BSP can saf= ely make use of its value. // - if (GetApState(CpuData) =3D=3D CpuStateFinished) { + if (GetApState(CpuData) =3D=3D CpuStateIdle) { CpuMpData->RunningCount ++; CpuMpData->CpuData[ProcessorNumber].Waiting =3D FALSE; - SetApState(CpuData, CpuStateIdle); =20 // // If in Single Thread mode, then search for the next waiting AP for= execution. @@ -1923,7 +1921,7 @@ SwitchBSPWorker ( // // Wait for old BSP finished AP task // - while (GetApState (&CpuMpData->CpuData[CallerNumber]) !=3D CpuStateFinis= hed) { + while (GetApState (&CpuMpData->CpuData[CallerNumber]) !=3D CpuStateIdle)= { CpuPause (); } =20 diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 9d0b866d09..962bce685d 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -85,7 +85,6 @@ typedef enum { CpuStateIdle, CpuStateReady, CpuStateBusy, - CpuStateFinished, CpuStateDisabled } CPU_STATE; =20 --=20 2.15.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Sun Apr 28 07:18:17 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1532505076505378.7431418588419; Wed, 25 Jul 2018 00:51:16 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 6280B210C1ECB; Wed, 25 Jul 2018 00:51:13 -0700 (PDT) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 31F4A210C1B9C for ; Wed, 25 Jul 2018 00:51:10 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jul 2018 00:51:09 -0700 Received: from ydong10-win10.ccr.corp.intel.com ([10.239.9.125]) by orsmga001.jf.intel.com with ESMTP; 25 Jul 2018 00:51:07 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,400,1526367600"; d="scan'208";a="75739877" From: Eric Dong To: edk2-devel@lists.01.org Date: Wed, 25 Jul 2018 15:50:19 +0800 Message-Id: <20180725075020.240-3-eric.dong@intel.com> X-Mailer: git-send-email 2.15.0.windows.1 In-Reply-To: <20180725075020.240-1-eric.dong@intel.com> References: <20180725075020.240-1-eric.dong@intel.com> Subject: [edk2] [Patch v3 2/3] UefiCpuPkg/MpInitLib: Remove StartCount and volatile definition. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Laszlo Ersek MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The StartCount is duplicated with RunningCount, replace it with RunningCount. Also the volatile for RunningCount is not needed. Cc: Laszlo Ersek Cc: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong Reviewed-by: Laszlo Ersek Reviewed-by: Ruiyu Ni Tested-by: Laszlo Ersek --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 11 +++++------ UefiCpuPkg/Library/MpInitLib/MpLib.h | 3 +-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index ff09a0e9e7..0e57cc86bf 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1424,7 +1424,7 @@ CheckAllAPs ( // value of state after setting the it to CpuStateIdle, so BSP can saf= ely make use of its value. // if (GetApState(CpuData) =3D=3D CpuStateIdle) { - CpuMpData->RunningCount ++; + CpuMpData->RunningCount --; CpuMpData->CpuData[ProcessorNumber].Waiting =3D FALSE; =20 // @@ -1449,7 +1449,7 @@ CheckAllAPs ( // // If all APs finish, return EFI_SUCCESS. // - if (CpuMpData->RunningCount =3D=3D CpuMpData->StartCount) { + if (CpuMpData->RunningCount =3D=3D 0) { return EFI_SUCCESS; } =20 @@ -1466,7 +1466,7 @@ CheckAllAPs ( // if (CpuMpData->FailedCpuList !=3D NULL) { *CpuMpData->FailedCpuList =3D - AllocatePool ((CpuMpData->StartCount - CpuMpData->FinishedCount += 1) * sizeof (UINTN)); + AllocatePool ((CpuMpData->RunningCount + 1) * sizeof (UINTN)); ASSERT (*CpuMpData->FailedCpuList !=3D NULL); } ListIndex =3D 0; @@ -2212,7 +2212,7 @@ StartupAllAPsWorker ( return EFI_NOT_STARTED; } =20 - CpuMpData->StartCount =3D 0; + CpuMpData->RunningCount =3D 0; for (ProcessorNumber =3D 0; ProcessorNumber < ProcessorCount; ProcessorN= umber++) { CpuData =3D &CpuMpData->CpuData[ProcessorNumber]; CpuData->Waiting =3D FALSE; @@ -2222,7 +2222,7 @@ StartupAllAPsWorker ( // Mark this processor as responsible for current calling. // CpuData->Waiting =3D TRUE; - CpuMpData->StartCount++; + CpuMpData->RunningCount++; } } } @@ -2231,7 +2231,6 @@ StartupAllAPsWorker ( CpuMpData->ProcArguments =3D ProcedureArgument; CpuMpData->SingleThread =3D SingleThread; CpuMpData->FinishedCount =3D 0; - CpuMpData->RunningCount =3D 0; CpuMpData->FailedCpuList =3D FailedCpuList; CpuMpData->ExpectedTime =3D CalculateTimeout ( TimeoutInMicroseconds, diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 962bce685d..5002b7e9c0 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -211,9 +211,8 @@ struct _CPU_MP_DATA { UINTN BackupBuffer; UINTN BackupBufferSize; =20 - volatile UINT32 StartCount; volatile UINT32 FinishedCount; - volatile UINT32 RunningCount; + UINT32 RunningCount; BOOLEAN SingleThread; EFI_AP_PROCEDURE Procedure; VOID *ProcArguments; --=20 2.15.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Sun Apr 28 07:18:17 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1532505094954786.6895320567569; Wed, 25 Jul 2018 00:51:34 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 926F0210C1ECA; Wed, 25 Jul 2018 00:51:34 -0700 (PDT) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 2CE10210C0F73 for ; Wed, 25 Jul 2018 00:51:33 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jul 2018 00:51:32 -0700 Received: from ydong10-win10.ccr.corp.intel.com ([10.239.9.125]) by orsmga001.jf.intel.com with ESMTP; 25 Jul 2018 00:51:08 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,400,1526367600"; d="scan'208";a="75739884" From: Eric Dong To: edk2-devel@lists.01.org Date: Wed, 25 Jul 2018 15:50:20 +0800 Message-Id: <20180725075020.240-4-eric.dong@intel.com> X-Mailer: git-send-email 2.15.0.windows.1 In-Reply-To: <20180725075020.240-1-eric.dong@intel.com> References: <20180725075020.240-1-eric.dong@intel.com> Subject: [edk2] [Patch v3 3/3] UefiCpuPkg/MpInitLib: Not use disabled AP when call StartAllAPs. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Laszlo Ersek MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Base on UEFI spec requirement, StartAllAPs function should not use the APs which has been disabled before. This patch just change current code to follow this rule. V3 changes: Only called by StartUpAllAps, WakeUpAp will not wake up the disabled APs, in other cases also need to include the disabled APs, such as CpuDxe driver start up and ChangeApLoopCallback function. Cc: Laszlo Ersek Cc: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong Reviewed-by: Laszlo Ersek Tested-by: Laszlo Ersek --- UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 2 +- UefiCpuPkg/Library/MpInitLib/MpLib.c | 27 +++++++++++++++++---------- UefiCpuPkg/Library/MpInitLib/MpLib.h | 4 +++- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index d82e9aea45..c17daa0fc0 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -306,7 +306,7 @@ MpInitChangeApLoopCallback ( CpuMpData->PmCodeSegment =3D GetProtectedModeCS (); CpuMpData->ApLoopMode =3D PcdGet8 (PcdCpuApLoopMode); mNumberToFinish =3D CpuMpData->CpuCount - 1; - WakeUpAP (CpuMpData, TRUE, 0, RelocateApLoop, NULL); + WakeUpAP (CpuMpData, TRUE, 0, RelocateApLoop, NULL, TRUE); while (mNumberToFinish > 0) { CpuPause (); } diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 0e57cc86bf..1a81062a3f 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -470,7 +470,7 @@ CollectProcessorCount ( // CpuMpData->InitFlag =3D ApInitConfig; CpuMpData->X2ApicEnable =3D FALSE; - WakeUpAP (CpuMpData, TRUE, 0, NULL, NULL); + WakeUpAP (CpuMpData, TRUE, 0, NULL, NULL, TRUE); CpuMpData->InitFlag =3D ApInitDone; ASSERT (CpuMpData->CpuCount <=3D PcdGet32 (PcdCpuMaxLogicalProcessorNumb= er)); // @@ -491,7 +491,7 @@ CollectProcessorCount ( // // Wakeup all APs to enable x2APIC mode // - WakeUpAP (CpuMpData, TRUE, 0, ApFuncEnableX2Apic, NULL); + WakeUpAP (CpuMpData, TRUE, 0, ApFuncEnableX2Apic, NULL, TRUE); // // Wait for all known APs finished // @@ -969,6 +969,7 @@ FreeResetVector ( @param[in] ProcessorNumber The handle number of specified processor @param[in] Procedure The function to be invoked by AP @param[in] ProcedureArgument The argument to be passed into AP function + @param[in] WakeUpDisabledAps Whether need to wake up disabled APs in br= oadcast mode. **/ VOID WakeUpAP ( @@ -976,7 +977,8 @@ WakeUpAP ( IN BOOLEAN Broadcast, IN UINTN ProcessorNumber, IN EFI_AP_PROCEDURE Procedure, OPTIONAL - IN VOID *ProcedureArgument OPTIONAL + IN VOID *ProcedureArgument, OPTIONAL + IN BOOLEAN WakeUpDisabledAps ) { volatile MP_CPU_EXCHANGE_INFO *ExchangeInfo; @@ -1010,6 +1012,10 @@ WakeUpAP ( for (Index =3D 0; Index < CpuMpData->CpuCount; Index++) { if (Index !=3D CpuMpData->BspNumber) { CpuData =3D &CpuMpData->CpuData[Index]; + if (GetApState (CpuData) =3D=3D CpuStateDisabled && !WakeUpDisable= dAps) { + continue; + } + CpuData->ApFunction =3D (UINTN) Procedure; CpuData->ApFunctionArgument =3D (UINTN) ProcedureArgument; SetApState (CpuData, CpuStateReady); @@ -1289,7 +1295,7 @@ ResetProcessorToIdleState ( CpuMpData =3D GetCpuMpData (); =20 CpuMpData->InitFlag =3D ApInitReconfig; - WakeUpAP (CpuMpData, FALSE, ProcessorNumber, NULL, NULL); + WakeUpAP (CpuMpData, FALSE, ProcessorNumber, NULL, NULL, TRUE); while (CpuMpData->FinishedCount < 1) { CpuPause (); } @@ -1439,7 +1445,8 @@ CheckAllAPs ( FALSE, (UINT32) NextProcessorNumber, CpuMpData->Procedure, - CpuMpData->ProcArguments + CpuMpData->ProcArguments, + TRUE ); } } @@ -1711,7 +1718,7 @@ MpInitLibInitialize ( // // Wakeup APs to do some AP initialize sync // - WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData); + WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData, TRUE); // // Wait for all APs finished initialization // @@ -1906,7 +1913,7 @@ SwitchBSPWorker ( // // Need to wakeUp AP (future BSP). // - WakeUpAP (CpuMpData, FALSE, ProcessorNumber, FutureBSPProc, CpuMpData); + WakeUpAP (CpuMpData, FALSE, ProcessorNumber, FutureBSPProc, CpuMpData, T= RUE); =20 AsmExchangeRole (&CpuMpData->BSPInfo, &CpuMpData->APInfo); =20 @@ -2240,14 +2247,14 @@ StartupAllAPsWorker ( CpuMpData->WaitEvent =3D WaitEvent; =20 if (!SingleThread) { - WakeUpAP (CpuMpData, TRUE, 0, Procedure, ProcedureArgument); + WakeUpAP (CpuMpData, TRUE, 0, Procedure, ProcedureArgument, FALSE); } else { for (ProcessorNumber =3D 0; ProcessorNumber < ProcessorCount; Processo= rNumber++) { if (ProcessorNumber =3D=3D CallerNumber) { continue; } if (CpuMpData->CpuData[ProcessorNumber].Waiting) { - WakeUpAP (CpuMpData, FALSE, ProcessorNumber, Procedure, ProcedureA= rgument); + WakeUpAP (CpuMpData, FALSE, ProcessorNumber, Procedure, ProcedureA= rgument, TRUE); break; } } @@ -2359,7 +2366,7 @@ StartupThisAPWorker ( CpuData->ExpectedTime =3D CalculateTimeout (TimeoutInMicroseconds, &CpuD= ata->CurrentTime); CpuData->TotalTime =3D 0; =20 - WakeUpAP (CpuMpData, FALSE, ProcessorNumber, Procedure, ProcedureArgumen= t); + WakeUpAP (CpuMpData, FALSE, ProcessorNumber, Procedure, ProcedureArgumen= t, TRUE); =20 // // If WaitEvent is NULL, execute in blocking mode. diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 5002b7e9c0..fe7a917e49 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -373,6 +373,7 @@ GetModeTransitionBuffer ( @param[in] ProcessorNumber The handle number of specified processor @param[in] Procedure The function to be invoked by AP @param[in] ProcedureArgument The argument to be passed into AP function + @param[in] WakeUpDisabledAps Whether need to wake up disabled APs in br= oadcast mode. **/ VOID WakeUpAP ( @@ -380,7 +381,8 @@ WakeUpAP ( IN BOOLEAN Broadcast, IN UINTN ProcessorNumber, IN EFI_AP_PROCEDURE Procedure, OPTIONAL - IN VOID *ProcedureArgument OPTIONAL + IN VOID *ProcedureArgument, OPTIONAL + IN BOOLEAN WakeUpDisabledAps OPTIONAL ); =20 /** --=20 2.15.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel