Re: [edk2-devel] [Patch v3 2/6] UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API.

2019-07-26 Thread Laszlo Ersek
On 07/24/19 09:07, Dong, Eric wrote:
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973
> 
> 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 
> Reviewed-by: Ray Ni 
> ---
>  UefiCpuPkg/Library/MpInitLib/DxeMpLib.c |  5 +-
>  UefiCpuPkg/Library/MpInitLib/MpLib.c| 61 +++--
>  UefiCpuPkg/Library/MpInitLib/MpLib.h|  6 ++-
>  UefiCpuPkg/Library/MpInitLib/PeiMpLib.c |  5 +-
>  4 files changed, 67 insertions(+), 10 deletions(-)

Regression-tested-by: Laszlo Ersek 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44456): https://edk2.groups.io/g/devel/message/44456
Mute This Topic: https://groups.io/mt/32581676/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-



[edk2-devel] [Patch v3 2/6] UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API.

2019-07-24 Thread Dong, Eric
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973

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 
Reviewed-by: Ray Ni 
---
 UefiCpuPkg/Library/MpInitLib/DxeMpLib.c |  5 +-
 UefiCpuPkg/Library/MpInitLib/MpLib.c| 61 +++--
 UefiCpuPkg/Library/MpInitLib/MpLib.h|  6 ++-
 UefiCpuPkg/Library/MpInitLib/PeiMpLib.c |  5 +-
 4 files changed, 67 insertions(+), 10 deletions(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c 
b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
index 6be1bae464..b17e287bbf 100644
--- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
@@ -1,7 +1,7 @@
 /** @file
   MP initialize support functions for DXE phase.
 
-  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
+  Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -568,9 +568,10 @@ MpInitLibStartupAllAPs (
   //
   mStopCheckAllApsStatus = TRUE;
 
-  Status = StartupAllAPsWorker (
+  Status = StartupAllCPUsWorker (
  Procedure,
  SingleThread,
+ TRUE,
  WaitEvent,
  TimeoutInMicroseconds,
  ProcedureArgument,
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c 
b/UefiCpuPkg/Library/MpInitLib/MpLib.c
index 6f51bc4ebf..572495ec36 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
@@ -2130,6 +2130,7 @@ MpInitLibGetNumberOfProcessors (
   number.  If FALSE, then all the enabled 
APs
   execute the function specified by 
Procedure
   simultaneously.
+  @param[in]  ExcludeBsp  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 microseconds 
for
@@ -2151,9 +2152,10 @@ MpInitLibGetNumberOfProcessors (
 
 **/
 EFI_STATUS
-StartupAllAPsWorker (
+StartupAllCPUsWorker (
   IN  EFI_AP_PROCEDURE  Procedure,
   IN  BOOLEAN   SingleThread,
+  IN  BOOLEAN   ExcludeBsp,
   IN  EFI_EVENT WaitEvent   OPTIONAL,
   IN  UINTN TimeoutInMicroseconds,
   IN  VOID  *ProcedureArgument  OPTIONAL,
@@ -2175,7 +2177,7 @@ StartupAllAPsWorker (
 *FailedCpuList = NULL;
   }
 
-  if (CpuMpData->CpuCount == 1) {
+  if (CpuMpData->CpuCount == 1 && ExcludeBsp) {
 return EFI_NOT_STARTED;
   }
 
@@ -2218,9 +2220,9 @@ StartupAllAPsWorker (
 }
   }
 
-  if (!HasEnabledAp) {
+  if (!HasEnabledAp && ExcludeBsp) {
 //
-// If no enabled AP exists, return EFI_NOT_STARTED.
+// If no enabled AP exists and not include Bsp to do the procedure, return 
EFI_NOT_STARTED.
 //
 return EFI_NOT_STARTED;
   }
@@ -2266,6 +2268,13 @@ StartupAllAPsWorker (
 }
   }
 
+  if (!ExcludeBsp) {
+//
+// Start BSP.
+//
+Procedure (ProcedureArgument);
+  }
+
   Status = EFI_SUCCESS;
   if (WaitEvent == NULL) {
 do {
@@ -2411,3 +2420,47 @@ GetCpuMpDataFromGuidedHob (
   return CpuMpData;
 }
 
+/**
+  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 microseconds 
for
+  APs to return from Procedure, either for
+  blocking or non-blocking mode. Zero means
+  infinity. TimeoutInMicroseconds is 
ignored
+  for BSP.
+  @param[in]  ProcedureArgument   The parameter passed into Procedure for
+  all APs.
+
+  @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_ERRORCaller 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 before
+  all enabled APs have finished.
+  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+MpInitLibStartupAllCPUs (
+  IN  EFI_AP_PROCEDURE  Procedure,
+  IN