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

2019-07-22 Thread Ni, Ray
"CPU"  is used in MpInitLibStartupAllCPUs() and StartupAllCpusWorker().
Can you please follow today's capital rule of "AP" to update
StartupAllCpusWorker() to StartupAllCPUsWorker()?

And with the copyright year update to 2019, Reviewed-by: Ray Ni 


> -Original Message-
> From: devel@edk2.groups.io  On Behalf Of Dong,
> Eric
> Sent: Monday, July 22, 2019 3:14 PM
> To: devel@edk2.groups.io
> Cc: Ni, Ray ; Laszlo Ersek ; Kumar,
> Chandana C ; Zeng, Star
> 
> Subject: [edk2-devel] [Patch v2 2/6] UefiCpuPkg/MpInitLib: Add
> MpInitLibStartupAllCPUs API.
> 
> 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 
> ---
>  UefiCpuPkg/Library/MpInitLib/DxeMpLib.c |  3 +-
>  UefiCpuPkg/Library/MpInitLib/MpLib.c| 60 +++-
> -
>  UefiCpuPkg/Library/MpInitLib/MpLib.h|  4 +-
>  UefiCpuPkg/Library/MpInitLib/PeiMpLib.c |  3 +-
>  4 files changed, 63 insertions(+), 7 deletions(-)
> 
> diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
> b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
> index 6be1bae464..23adfd0625 100644
> --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
> +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
> @@ -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..51e63e14a3 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,46 @@ 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.
> +  @param[in]  ProcedureArgument   The parameter pa

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

2019-07-22 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 
---
 UefiCpuPkg/Library/MpInitLib/DxeMpLib.c |  3 +-
 UefiCpuPkg/Library/MpInitLib/MpLib.c| 60 +++--
 UefiCpuPkg/Library/MpInitLib/MpLib.h|  4 +-
 UefiCpuPkg/Library/MpInitLib/PeiMpLib.c |  3 +-
 4 files changed, 63 insertions(+), 7 deletions(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c 
b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
index 6be1bae464..23adfd0625 100644
--- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
@@ -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..51e63e14a3 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,46 @@ 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.
+  @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  UINTN TimeoutInMicroseconds,
+  IN  VOID  *ProcedureArgument  OPTIONAL
+  )
+{
+  return StartupAllCpusWorker (
+   Procedure,
+   FALSE,
+   FALSE,
+   NULL,
+   TimeoutInMicroseconds,
+   ProcedureArgument,
+   NULL
+   );
+}
diff --git