Re: [edk2-devel] [Patch v2 2/6] UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API.
"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.
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