From nobody Sun Feb 8 01:33:14 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+44018+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+44018+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1563521297; cv=none; d=zoho.com; s=zohoarc; b=ONqZYzHueJUS+FDNBPFPwGEAazq75U5+kgHALqJOOld12FS2ICG8Jn1t5TshYMtypSdAqD56Y4f/5aVIN5rWOX4kwDL8sSCBDLiXKfTybR9EEWe0nKjajPuO+zSTfxNMDJoLctCGCzWyxV2yZDS5kNy//LAPret5FtOWTZl3Kjg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1563521297; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=SQemUqUb1dL8FUfQi6bG0oCwuvHsuSYcsuQwDNHV/6M=; b=DmgAeQj2LapxE2N1BYbSb6H1rYOSeLQfGQl9V43p2bjrkyxec5Ag6FgXGSzbLNocHb7H7sCyD10IPk77/xwqJF3AjC06OdUtH0JVBpp22oFnIQ75Y65Wpy041OEzpXrVyrB/gimLB3x78qdLWdWfqaswKDJcKecokQhPS1/YW8o= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+44018+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 1563521297879561.4178288453674; Fri, 19 Jul 2019 00:28:17 -0700 (PDT) Return-Path: X-Received: from mga09.intel.com (mga09.intel.com []) by groups.io with SMTP; Fri, 19 Jul 2019 00:28:17 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2019 00:28:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,281,1559545200"; d="scan'208";a="170828856" X-Received: from ydong10-win10.ccr.corp.intel.com ([10.239.158.133]) by orsmga003.jf.intel.com with ESMTP; 19 Jul 2019 00:28:15 -0700 From: "Dong, Eric" To: devel@edk2.groups.io Cc: Ray Ni , Laszlo Ersek , Chandana Kumar , Star Zeng Subject: [edk2-devel] [Patch 2/5] UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API. Date: Fri, 19 Jul 2019 15:28:07 +0800 Message-Id: <20190719072811.6352-3-eric.dong@intel.com> In-Reply-To: <20190719072811.6352-1-eric.dong@intel.com> References: <20190719072811.6352-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 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1563521297; bh=Det5vLbKFU8H0krJRgh7gRHD1VHP55i2xHk8x3AecxI=; h=Cc:Date:From:Reply-To:Subject:To; b=LUhjILrbGz/KjIMQptUBs9QUqTRbGCgVYGJjcP/hdDsftGiehM0akR//aNmoiAXDm1+ rZwaxbirw6ZxrsBiHiNSjSuQa0O4qEObHCGk5GIc1D2uChlVvHXIJvvQLaUfMbDXqZPhz qe+v/HEJ+l08F18Jz1X6ZCVXX7RjlaIvrGM= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1973 Add new MpInitLibStartupAllCPUs API uses to start all processors at the same time. Cc: Ray Ni Cc: Laszlo Ersek Cc: Chandana Kumar Cc: Star Zeng Signed-off-by: Eric Dong --- UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 1 + UefiCpuPkg/Library/MpInitLib/MpLib.c | 74 ++++++++++++++++++++++++- UefiCpuPkg/Library/MpInitLib/MpLib.h | 2 + UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 1 + 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index 6be1bae464..69c34afdf1 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -571,6 +571,7 @@ MpInitLibStartupAllAPs ( Status =3D StartupAllAPsWorker ( Procedure, SingleThread, + FALSE, WaitEvent, TimeoutInMicroseconds, ProcedureArgument, diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 6f51bc4ebf..791f5e85ab 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -2130,6 +2130,7 @@ MpInitLibGetNumberOfProcessors ( number. If FALSE, then all the enab= led APs execute the function specified by Pr= ocedure simultaneously. + @param[in] IncludeBsp Whether let BSP also trig this task. @param[in] WaitEvent The event created by the caller with= CreateEvent() service. @param[in] TimeoutInMicroseconds Indicates the time limit in microsec= onds for @@ -2154,6 +2155,7 @@ EFI_STATUS StartupAllAPsWorker ( IN EFI_AP_PROCEDURE Procedure, IN BOOLEAN SingleThread, + IN BOOLEAN IncludeBsp, IN EFI_EVENT WaitEvent OPTIONAL, IN UINTN TimeoutInMicroseconds, IN VOID *ProcedureArgument OPTIONAL, @@ -2175,7 +2177,7 @@ StartupAllAPsWorker ( *FailedCpuList =3D NULL; } =20 - if (CpuMpData->CpuCount =3D=3D 1) { + if (CpuMpData->CpuCount =3D=3D 1 && !IncludeBsp) { return EFI_NOT_STARTED; } =20 @@ -2218,9 +2220,9 @@ StartupAllAPsWorker ( } } =20 - if (!HasEnabledAp) { + if (!HasEnabledAp && !IncludeBsp) { // - // If no enabled AP exists, return EFI_NOT_STARTED. + // If no enabled AP exists and not include Bsp to do the procedure, re= turn EFI_NOT_STARTED. // return EFI_NOT_STARTED; } @@ -2266,6 +2268,13 @@ StartupAllAPsWorker ( } } =20 + if (IncludeBsp) { + // + // Start BSP. + // + Procedure (ProcedureArgument); + } + Status =3D EFI_SUCCESS; if (WaitEvent =3D=3D NULL) { do { @@ -2411,3 +2420,62 @@ GetCpuMpDataFromGuidedHob ( return CpuMpData; } =20 +/** + This service executes a caller provided function on all enabled CPUs. + + @param[in] Procedure A pointer to the function to be run = on + enabled APs of the system. See type + EFI_AP_PROCEDURE. + @param[in] TimeoutInMicroseconds Indicates the time limit in microsec= onds for + APs to return from Procedure, either= for + blocking or non-blocking mode. Zero = means + infinity. + @param[in] ProcedureArgument The parameter passed into Procedure = for + all APs. + @param[out] FailedCpuList If NULL, this parameter is ignored. = Otherwise, + if all APs finish successfully, then= its + content is set to NULL. If not all A= Ps + finish before timeout expires, then = its + content is set to address of the buf= fer + holding handle numbers of the failed= APs. + The buffer is allocated by MP Initia= lization + library, and it's the caller's respo= nsibility to + free the buffer with FreePool() serv= ice. + In blocking mode, it is ready for co= nsumption + when the call returns. In non-blocki= ng mode, + it is ready when WaitEvent is signal= ed. The + list of failed CPU is terminated by + END_OF_CPU_LIST. + + @retval EFI_SUCCESS In blocking mode, all CPUs have finished= before + the timeout expired. + @retval EFI_SUCCESS In non-blocking mode, function has been = dispatched + to all enabled CPUs. + @retval EFI_DEVICE_ERROR Caller processor is AP. + @retval EFI_NOT_READY Any enabled APs are busy. + @retval EFI_NOT_READY MP Initialize Library is not initialized. + @retval EFI_TIMEOUT In blocking mode, the timeout expired be= fore + all enabled APs have finished. + @retval EFI_INVALID_PARAMETER Procedure is NULL. + +**/ +EFI_STATUS +EFIAPI +MpInitLibStartupAllCPUs ( + IN EFI_AP_PROCEDURE Procedure, + IN UINTN TimeoutInMicroseconds, + IN VOID *ProcedureArgument OPTIONAL, + OUT UINTN **FailedCpuList OPTIONAL + ) +{ + return StartupAllAPsWorker ( + Procedure, + FALSE, + TRUE, + NULL, + TimeoutInMicroseconds, + ProcedureArgument, + FailedCpuList + ); +} + diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index f89037c59e..fce7961a98 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -405,6 +405,7 @@ InitMpGlobalData ( number. If FALSE, then all the enab= led APs execute the function specified by Pr= ocedure simultaneously. + @param[in] IncludeBsp Whether let BSP also trig this task. @param[in] WaitEvent The event created by the caller with= CreateEvent() service. @param[in] TimeoutInMicroseconds Indicates the time limit in microsec= onds for @@ -429,6 +430,7 @@ EFI_STATUS StartupAllAPsWorker ( IN EFI_AP_PROCEDURE Procedure, IN BOOLEAN SingleThread, + IN BOOLEAN IncludeBsp, IN EFI_EVENT WaitEvent OPTIONAL, IN UINTN TimeoutInMicroseconds, IN VOID *ProcedureArgument OPTIONAL, diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library/M= pInitLib/PeiMpLib.c index 35dff91fd2..a3e568b056 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c @@ -404,6 +404,7 @@ MpInitLibStartupAllAPs ( return StartupAllAPsWorker ( Procedure, SingleThread, + FALSE, NULL, TimeoutInMicroseconds, ProcedureArgument, --=20 2.21.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 (#44018): https://edk2.groups.io/g/devel/message/44018 Mute This Topic: https://groups.io/mt/32524458/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-