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

Ni, Ray ray.ni at intel.com
Tue Jul 23 05:46:29 UTC 2019


"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 <ray.ni at intel.com>

> -----Original Message-----
> From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Dong,
> Eric
> Sent: Monday, July 22, 2019 3:14 PM
> To: devel at edk2.groups.io
> Cc: Ni, Ray <ray.ni at intel.com>; Laszlo Ersek <lersek at redhat.com>; Kumar,
> Chandana C <chandana.c.kumar at intel.com>; Zeng, Star
> <star.zeng at intel.com>
> 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 <ray.ni at intel.com>
> Cc: Laszlo Ersek <lersek at redhat.com>
> Cc: Chandana Kumar <chandana.c.kumar at intel.com>
> Cc: Star Zeng <star.zeng at intel.com>
> Signed-off-by: Eric Dong <eric.dong at intel.com>
> ---
>  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_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 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 a/UefiCpuPkg/Library/MpInitLib/MpLib.h
> b/UefiCpuPkg/Library/MpInitLib/MpLib.h
> index f89037c59e..81de45c73b 100644
> --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h
> +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h
> @@ -405,6 +405,7 @@ InitMpGlobalData (
>                                        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
> @@ -426,9 +427,10 @@ InitMpGlobalData (
> 
>  **/
>  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,
> diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c
> b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c
> index 35dff91fd2..5666ad0862 100644
> --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c
> +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c
> @@ -401,9 +401,10 @@ MpInitLibStartupAllAPs (
>      return EFI_UNSUPPORTED;
>    }
> 
> -  return StartupAllAPsWorker (
> +  return StartupAllCpusWorker (
>             Procedure,
>             SingleThread,
> +           TRUE,
>             NULL,
>             TimeoutInMicroseconds,
>             ProcedureArgument,
> --
> 2.21.0.windows.1
> 
> 
> 


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

View/Reply Online (#44212): https://edk2.groups.io/g/devel/message/44212
Mute This Topic: https://groups.io/mt/32556153/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list