From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: ray.ni@intel.com) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by groups.io with SMTP; Fri, 19 Jul 2019 00:56:57 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2019 00:56:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,281,1559545200"; d="scan'208";a="168488491" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga008.fm.intel.com with ESMTP; 19 Jul 2019 00:56:56 -0700 Received: from fmsmsx122.amr.corp.intel.com (10.18.125.37) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 19 Jul 2019 00:56:56 -0700 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by fmsmsx122.amr.corp.intel.com (10.18.125.37) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 19 Jul 2019 00:56:56 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.110]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.240]) with mapi id 14.03.0439.000; Fri, 19 Jul 2019 15:56:54 +0800 From: "Ni, Ray" To: "devel@edk2.groups.io" , "Dong, Eric" CC: Laszlo Ersek , "Kumar, Chandana C" , "Zeng, Star" Subject: Re: [edk2-devel] [Patch 2/5] UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API. Thread-Topic: [edk2-devel] [Patch 2/5] UefiCpuPkg/MpInitLib: Add MpInitLibStartupAllCPUs API. Thread-Index: AQHVPgONxIHbengbH02PomS9sbUyKKbRkmTA Date: Fri, 19 Jul 2019 07:56:54 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C23884E@SHSMSX104.ccr.corp.intel.com> References: <20190719072811.6352-1-eric.dong@intel.com> <20190719072811.6352-3-eric.dong@intel.com> In-Reply-To: <20190719072811.6352-3-eric.dong@intel.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I feel having additional parameter "IncludeBsp" in StartupAllAps() is a bit= confusing. How abut let StartupAllAPs() call StartupAllCPUs()? StartupAllCPUs() contains a parameter indicating whether BSP is excluded. > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Dong, > Eric > Sent: Friday, July 19, 2019 3:28 PM > To: devel@edk2.groups.io > Cc: Ni, Ray ; Laszlo Ersek ; Kumar, > Chandana C ; Zeng, Star > > Subject: [edk2-devel] [Patch 2/5] UefiCpuPkg/MpInitLib: Add > MpInitLibStartupAllCPUs API. >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1973 >=20 > Add new MpInitLibStartupAllCPUs API uses to start all processors at the = same > time. >=20 > 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(-) >=20 > diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c > b/UefiCpuPkg/Library/MpInitLib/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/MpInitLib/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 e= nabled APs > execute the function specified by= Procedure > simultaneously. > + @param[in] IncludeBsp Whether let BSP also trig this ta= sk. > @param[in] WaitEvent The event created by the caller w= ith > CreateEvent() > service. > @param[in] TimeoutInMicroseconds Indicates the time limit in > microseconds 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,= return > 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 r= un on > + enabled APs of the system. See ty= pe > + EFI_AP_PROCEDURE. > + @param[in] TimeoutInMicroseconds Indicates the time limit in > microseconds for > + APs to return from Procedure, eit= her for > + blocking or non-blocking mode. Ze= ro means > + infinity. > + @param[in] ProcedureArgument The parameter passed into > Procedure for > + all APs. > + @param[out] FailedCpuList If NULL, this parameter is ignore= d. > Otherwise, > + if all APs finish successfully, t= hen its > + content is set to NULL. If not al= l APs > + finish before timeout expires, th= en its > + content is set to address of the = buffer > + holding handle numbers of the fai= led APs. > + The buffer is allocated by MP Ini= tialization > + library, and it's the caller's re= sponsibility to > + free the buffer with FreePool() s= ervice. > + In blocking mode, it is ready for= consumption > + when the call returns. In non-blo= cking mode, > + it is ready when WaitEvent is sig= naled. The > + list of failed CPU is terminated = by > + END_OF_CPU_LIST. > + > + @retval EFI_SUCCESS In blocking mode, all CPUs have finis= hed > before > + the timeout expired. > + @retval EFI_SUCCESS In non-blocking mode, function has be= en > 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 initiali= zed. > + @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, > + OUT UINTN **FailedCpuList OPTIONAL > + ) > +{ > + return StartupAllAPsWorker ( > + Procedure, > + FALSE, > + TRUE, > + NULL, > + TimeoutInMicroseconds, > + ProcedureArgument, > + FailedCpuList > + ); > +} > + > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h > b/UefiCpuPkg/Library/MpInitLib/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 e= nabled APs > execute the function specified by= Procedure > simultaneously. > + @param[in] IncludeBsp Whether let BSP also trig this ta= sk. > @param[in] WaitEvent The event created by the caller w= ith > CreateEvent() > service. > @param[in] TimeoutInMicroseconds Indicates the time limit in > microseconds 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/MpInitLib/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, > -- > 2.21.0.windows.1 >=20 >=20 >=20