From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 33A6181CE7 for ; Tue, 8 Nov 2016 23:21:08 -0800 (PST) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga105.jf.intel.com with ESMTP; 08 Nov 2016 23:21:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,465,1473145200"; d="scan'208";a="29189646" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga005.jf.intel.com with ESMTP; 08 Nov 2016 23:21:11 -0800 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 8 Nov 2016 23:21:11 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx156.amr.corp.intel.com (10.18.116.74) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 8 Nov 2016 23:21:10 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.104]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.139]) with mapi id 14.03.0248.002; Wed, 9 Nov 2016 15:21:08 +0800 From: "Tian, Feng" To: "Fan, Jeff" , "edk2-devel@ml01.01.org" CC: "Gao, Liming" , "Kinney, Michael D" , "Tian, Feng" Thread-Topic: [PATCH] UefiCpuPkg/MpInitLib: Do not wakeup AP if only one processor supported Thread-Index: AQHSNnQUGONgFkCpi02jZVknBpF/HaDQRrZw Date: Wed, 9 Nov 2016 07:21:08 +0000 Message-ID: <7F1BAD85ADEA444D97065A60D2E97EE566E3E6BE@SHSMSX101.ccr.corp.intel.com> References: <20161104081806.19624-1-jeff.fan@intel.com> In-Reply-To: <20161104081806.19624-1-jeff.fan@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] UefiCpuPkg/MpInitLib: Do not wakeup AP if only one processor supported X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Nov 2016 07:21:08 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Feng Tian Thanks Feng -----Original Message----- From: Fan, Jeff=20 Sent: Friday, November 4, 2016 4:18 PM To: edk2-devel@ml01.01.org Cc: Tian, Feng ; Gao, Liming ; K= inney, Michael D Subject: [PATCH] UefiCpuPkg/MpInitLib: Do not wakeup AP if only one process= or supported If MaxLogicalProcessorNumber is only 1, we needn't to wake up APs at all an= d needn't to register callback functions. It could improve boot performance on single supported system. https://bugzilla.tianocore.org/show_bug.cgi?id=3D204 Cc: Feng Tian Cc: Liming Gao Cc: Michael Kinney Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan --- UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 7 ++++++ UefiCpuPkg/Library/MpInitLib/MpLib.c | 39 +++++++++++++++++++----------= ---- UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 8 +++++++ 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index b399f1c..eb36d6f 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -290,6 +290,13 @@ InitMpGlobalData ( =20 SaveCpuMpData (CpuMpData); =20 + if (CpuMpData->CpuCount =3D=3D 1) { + // + // If only BSP exists, return + // + return; + } + // // Avoid APs access invalid buff data which allocated by BootServices, // so we will allocate reserved data for AP loop code. diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 56b870e..a0edc55 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1143,6 +1143,7 @@ MpInitLibInitialize ( } else { MaxLogicalProcessorNumber =3D OldCpuMpData->CpuCount; } + ASSERT (MaxLogicalProcessorNumber !=3D 0); =20 AsmGetAddressMap (&AddressMap); ApResetVectorSize =3D AddressMap.RendezvousFunnelSize + sizeof (MP_CPU_E= XCHANGE_INFO); @@ -1209,10 +1210,12 @@ MpInitLibInitialize ( MtrrGetAllMtrrs (&CpuMpData->MtrrTable); =20 if (OldCpuMpData =3D=3D NULL) { - // - // Wakeup all APs and calculate the processor count in system - // - CollectProcessorCount (CpuMpData); + if (MaxLogicalProcessorNumber > 1) { + // + // Wakeup all APs and calculate the processor count in system + // + CollectProcessorCount (CpuMpData); + } } else { // // APs have been wakeup before, just get the CPU Information @@ -1238,= 19 +1241,21 @@ MpInitLibInitialize ( sizeof (CPU_VOLATILE_REGISTERS) ); } - // - // Wakeup APs to do some AP initialize sync - // - WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData); - // - // Wait for all APs finished initialization - // - while (CpuMpData->FinishedCount < (CpuMpData->CpuCount - 1)) { - CpuPause (); - } - CpuMpData->InitFlag =3D ApInitDone; - for (Index =3D 0; Index < CpuMpData->CpuCount; Index++) { - SetApState (&CpuMpData->CpuData[Index], CpuStateIdle); + if (MaxLogicalProcessorNumber > 1) { + // + // Wakeup APs to do some AP initialize sync + // + WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData); + // + // Wait for all APs finished initialization + // + while (CpuMpData->FinishedCount < (CpuMpData->CpuCount - 1)) { + CpuPause (); + } + CpuMpData->InitFlag =3D ApInitDone; + for (Index =3D 0; Index < CpuMpData->CpuCount; Index++) { + SetApState (&CpuMpData->CpuData[Index], CpuStateIdle); + } } } =20 diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library/M= pInitLib/PeiMpLib.c index e242d37..1f2fcb8 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c @@ -321,6 +321,14 @@ InitMpGlobalData ( EFI_STATUS Status; =20 SaveCpuMpData (CpuMpData); + + if (CpuMpData->CpuCount =3D=3D 1) { + // + // If only BSP exists, return + // + return; + } + // // Register an event for EndOfPei // -- 2.9.3.windows.2