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.115, mailfrom: ray.ni@intel.com) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by groups.io with SMTP; Fri, 19 Jul 2019 01:06:19 -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 fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Jul 2019 01:06:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,281,1559545200"; d="scan'208";a="168490234" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga008.fm.intel.com with ESMTP; 19 Jul 2019 01:06:19 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 19 Jul 2019 01:06:19 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 19 Jul 2019 01:06:18 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.110]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.134]) with mapi id 14.03.0439.000; Fri, 19 Jul 2019 16:06:17 +0800 From: "Ni, Ray" To: "devel@edk2.groups.io" , "Dong, Eric" CC: Laszlo Ersek , "Kumar, Chandana C" , "Zeng, Star" Subject: Re: [edk2-devel] [Patch 5/5] UefiCpuPkg/RegisterCpuFeaturesLib: Start all processors simultaneously. Thread-Topic: [edk2-devel] [Patch 5/5] UefiCpuPkg/RegisterCpuFeaturesLib: Start all processors simultaneously. Thread-Index: AQHVPgOQu1CyGwT5v0iJj8PPRVXMKqbRlOAw Date: Fri, 19 Jul 2019 08:06:17 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C238940@SHSMSX104.ccr.corp.intel.com> References: <20190719072811.6352-1-eric.dong@intel.com> <20190719072811.6352-6-eric.dong@intel.com> In-Reply-To: <20190719072811.6352-6-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 1. does this module still consume MpPpi? If no, please update the INF. 2. This reminds me that there is another lib instance MpInitLibUp, you nee= d to update that as well. For *StartupAllCPUs(), implementation in that Up instance can just call th= e procedure. This abstracts the behavior so your C code change in this patch can work even MpInitLibUp= links to CpuMpPei. > -----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 5/5] UefiCpuPkg/RegisterCpuFeaturesLib: Sta= rt > all processors simultaneously. >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1973 >=20 > For semaphore type register, it required all processors to do the task a= t the > same time. > Current logic begins BSP's task after all APs have finished their tasks. > This will caused set semaphore task hang if semaphore has package level > type. > This patch use new EDKII_PEI_MP_SERVICES2_PPI to start all processors at > the same time to fix the potential hang issue. >=20 > Cc: Ray Ni > Cc: Laszlo Ersek > Cc: Chandana Kumar > Cc: Star Zeng > Signed-off-by: Eric Dong > --- > .../PeiRegisterCpuFeaturesLib.c | 62 ++++++++++++++----- > .../PeiRegisterCpuFeaturesLib.inf | 1 + > 2 files changed, 47 insertions(+), 16 deletions(-) >=20 > diff --git > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c > index 8ad5a40e5a..9ed0fbf381 100644 > --- > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c > +++ > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLi > +++ b.c > @@ -12,6 +12,8 @@ > #include > #include > #include > +#include > + > #include "RegisterCpuFeatures.h" >=20 > #define REGISTER_CPU_FEATURES_GUID \ > @@ -180,6 +182,48 @@ StartupAPsWorker ( > ASSERT_EFI_ERROR (Status); > } >=20 > +/** > + Worker function to execute a caller provided function on all enabled = APs. > + > + @param[in] Procedure A pointer to the function to be r= un on > + enabled APs of the system. > + @param[in] MpEvent The Event used to sync the result= . > + > +**/ > +VOID > +StartupCPUsWorker ( > + IN EFI_AP_PROCEDURE Procedure > + ) > +{ > + EFI_STATUS Status; > + EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi; > + CPU_FEATURES_DATA *CpuFeaturesData; > + > + CpuFeaturesData =3D GetCpuFeaturesData (); > + > + // > + // Get MP Services2 Ppi > + // > + Status =3D PeiServicesLocatePpi ( > + &gEdkiiPeiMpServices2PpiGuid, > + 0, > + NULL, > + (VOID **)&CpuMp2Ppi > + ); > + ASSERT_EFI_ERROR (Status); > + > + // > + // Wakeup all APs for data collection. > + // > + Status =3D CpuMp2Ppi->StartupAllCPUs ( > + CpuMp2Ppi, > + Procedure, > + 0, > + CpuFeaturesData > + ); > + ASSERT_EFI_ERROR (Status); > +} > + > /** > Worker function to switch the requested AP to be the BSP from that po= int > onward. >=20 > @@ -267,23 +311,9 @@ CpuFeaturesInitialize ( > CpuFeaturesData->BspNumber =3D OldBspNumber; >=20 > // > - // Known limitation: In PEI phase, CpuFeatures driver not > - // support async mode execute tasks. So semaphore type > - // register can't been used for this instance, must use > - // DXE type instance. > - // > - > - if (CpuFeaturesData->NumberOfCpus > 1) { > - // > - // Wakeup all APs for programming. > - // > - StartupAPsWorker (SetProcessorRegister, NULL); > - } > - > - // > - // Programming BSP > + // Start to program register for all CPUs. > // > - SetProcessorRegister (CpuFeaturesData); > + StartupCPUsWorker (SetProcessorRegister); >=20 > // > // Switch to new BSP if required > diff --git > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.in > f > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.in > f > index 63091dfeb8..61f922bf63 100644 > --- > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.in > f > +++ > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLi > +++ b.inf > @@ -46,6 +46,7 @@ >=20 > [Ppis] > gEfiPeiMpServicesPpiGuid = ## CONSUMES > + gEdkiiPeiMpServices2PpiGuid = ## CONSUMES >=20 > [Pcd] > gUefiCpuPkgTokenSpaceGuid.PcdCpuS3DataAddress = ## > CONSUMES > -- > 2.21.0.windows.1 >=20 >=20 >=20