From nobody Mon Dec 23 13:25:05 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1518163569689287.26558936461265; Fri, 9 Feb 2018 00:06:09 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 88CBA222DE15A; Fri, 9 Feb 2018 00:00:22 -0800 (PST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 2F971223DB780 for ; Fri, 9 Feb 2018 00:00:21 -0800 (PST) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Feb 2018 00:06:06 -0800 Received: from shwdeopenpsi114.ccr.corp.intel.com ([10.239.157.135]) by fmsmga005.fm.intel.com with ESMTP; 09 Feb 2018 00:06:06 -0800 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=dandan.bi@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,482,1511856000"; d="scan'208";a="202604622" From: Dandan Bi To: edk2-devel@lists.01.org Date: Fri, 9 Feb 2018 16:05:19 +0800 Message-Id: <1518163522-23144-5-git-send-email-dandan.bi@intel.com> X-Mailer: git-send-email 1.9.5.msysgit.1 In-Reply-To: <1518163522-23144-1-git-send-email-dandan.bi@intel.com> References: <1518163522-23144-1-git-send-email-dandan.bi@intel.com> Subject: [edk2] [PATCH v2 4/7] MdeModulePkg/UefiBootManagerLib: Remove the useless pref codes X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Star Zeng , Liming Gao MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" V2: Just update the commit message to reference the hash value of new new performance infrastructure. Our new performance infrastructure (edk2 trunk commit hash value: SHA-1: 73fef64f14d1b97ae9bd4705df3becc022391eba ~ SHA-1: 115eae650bfd2be2c2bc37360f4a755065e774c4) can support to dump performance date form ACPI table in OS. So we can remove the old pref code to write performance data to OS. Cc: Liming Gao Cc: Ruiyu Ni Cc: Star Zeng Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi Reviewed-by: Ruiyu Ni --- MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 27 +- .../Library/UefiBootManagerLib/BmPerformance.c | 317 -----------------= ---- .../Library/UefiBootManagerLib/InternalBm.h | 17 -- .../UefiBootManagerLib/UefiBootManagerLib.inf | 4 +- 4 files changed, 26 insertions(+), 339 deletions(-) delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePk= g/Library/UefiBootManagerLib/BmBoot.c index 6404233..ce19ae4 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c @@ -26,10 +26,33 @@ EFI_BOOT_MANAGER_LEGACY_BOOT mBmLegacyB= oot =3D NULL; /// EFI_GUID mBmHardDriveBootVariableGuid =3D { 0xfab7e9e1, 0x39dd, 0x4f2b, { = 0x84, 0x08, 0xe2, 0x0e, 0x90, 0x6c, 0xb6, 0xde } }; EFI_GUID mBmAutoCreateBootOptionGuid =3D { 0x8108ac4e, 0x9f11, 0x4d59, { = 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2 } }; =20 /** + + End Perf entry of BDS + + @param Event The triggered event. + @param Context Context for this event. + +**/ +VOID +EFIAPI +BmEndOfBdsPerfCode ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + // + // Record the performance data for End of BDS + // + PERF_END(NULL, "BDS", NULL, 0); + + return ; +} + +/** The function registers the legacy boot support capabilities. =20 @param RefreshLegacyBootOption The function pointer to create all the le= gacy boot options. @param LegacyBoot The function pointer to boot the legacy b= oot option. **/ @@ -1828,11 +1851,11 @@ EfiBootManagerBoot ( // // Create an event to be signalled when Legacy Boot occurs to writ= e performance data. // Status =3D EfiCreateEventLegacyBootEx( TPL_NOTIFY, - BmWriteBootToOsPerformanceData, + BmEndOfBdsPerfCode, NULL,=20 &LegacyBootEvent ); ASSERT_EFI_ERROR (Status); ); @@ -1869,11 +1892,11 @@ EfiBootManagerBoot ( =20 // // Write boot to OS performance data for UEFI boot // PERF_CODE ( - BmWriteBootToOsPerformanceData (NULL, NULL); + BmEndOfBdsPerfCode (NULL, NULL); ); =20 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoader= Start)); =20 Status =3D gBS->StartImage (ImageHandle, &BootOption->ExitDataSize, &Boo= tOption->ExitData); diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c b/MdeM= odulePkg/Library/UefiBootManagerLib/BmPerformance.c deleted file mode 100644 index 4d4495b..0000000 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c +++ /dev/null @@ -1,317 +0,0 @@ -/** @file - This file include the file which can help to get the system - performance, all the function will only include if the performance - switch is set. - -Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.
-This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD = License -which accompanies this distribution. The full text of the license may be = found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. - -**/ - -#include "InternalBm.h" - -PERF_HEADER mBmPerfHeader; -PERF_DATA mBmPerfData; -EFI_PHYSICAL_ADDRESS mBmAcpiLowMemoryBase =3D 0x0FFFFFFFFULL; - -/** - Get the short verion of PDB file name to be - used in performance data logging. - - @param PdbFileName The long PDB file name. - @param GaugeString The output string to be logged by performance log= ger. - @param StringSize The buffer size of GaugeString in bytes. - -**/ -VOID -BmGetShortPdbFileName ( - IN CONST CHAR8 *PdbFileName, - OUT CHAR8 *GaugeString, - IN UINTN StringSize - ) -{ - UINTN Index; - UINTN Index1; - UINTN StartIndex; - UINTN EndIndex; - - if (PdbFileName =3D=3D NULL) { - AsciiStrCpyS (GaugeString, StringSize, " "); - } else { - StartIndex =3D 0; - for (EndIndex =3D 0; PdbFileName[EndIndex] !=3D 0; EndIndex++) - ; - - for (Index =3D 0; PdbFileName[Index] !=3D 0; Index++) { - if ((PdbFileName[Index] =3D=3D '\\') || (PdbFileName[Index] =3D=3D '= /')) { - StartIndex =3D Index + 1; - } - - if (PdbFileName[Index] =3D=3D '.') { - EndIndex =3D Index; - } - } - - Index1 =3D 0; - for (Index =3D StartIndex; Index < EndIndex; Index++) { - GaugeString[Index1] =3D PdbFileName[Index]; - Index1++; - if (Index1 =3D=3D StringSize - 1) { - break; - } - } - - GaugeString[Index1] =3D 0; - } - - return ; -} - -/** - Get the name from the Driver handle, which can be a handle with - EFI_LOADED_IMAGE_PROTOCOL or EFI_DRIVER_BINDING_PROTOCOL installed. - This name can be used in performance data logging. - - @param Handle Driver handle. - @param GaugeString The output string to be logged by performance log= ger. - @param StringSize The buffer size of GaugeString in bytes. - -**/ -VOID -BmGetNameFromHandle ( - IN EFI_HANDLE Handle, - OUT CHAR8 *GaugeString, - IN UINTN StringSize - ) -{ - EFI_STATUS Status; - EFI_LOADED_IMAGE_PROTOCOL *Image; - CHAR8 *PdbFileName; - EFI_DRIVER_BINDING_PROTOCOL *DriverBinding; - - AsciiStrCpyS (GaugeString, StringSize, " "); - - // - // Get handle name from image protocol - // - Status =3D gBS->HandleProtocol ( - Handle, - &gEfiLoadedImageProtocolGuid, - (VOID **) &Image - ); - - if (EFI_ERROR (Status)) { - Status =3D gBS->OpenProtocol ( - Handle, - &gEfiDriverBindingProtocolGuid, - (VOID **) &DriverBinding, - NULL, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return ; - } - // - // Get handle name from image protocol - // - Status =3D gBS->HandleProtocol ( - DriverBinding->ImageHandle, - &gEfiLoadedImageProtocolGuid, - (VOID **) &Image - ); - } - - PdbFileName =3D PeCoffLoaderGetPdbPointer (Image->ImageBase); - - if (PdbFileName !=3D NULL) { - BmGetShortPdbFileName (PdbFileName, GaugeString, StringSize); - } - - return ; -} - -/** - - Writes performance data of booting into the allocated memory. - OS can process these records. - - @param Event The triggered event. - @param Context Context for this event. - -**/ -VOID -EFIAPI -BmWriteBootToOsPerformanceData ( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - EFI_STATUS Status; - UINT32 LimitCount; - EFI_HANDLE *Handles; - UINTN NoHandles; - CHAR8 GaugeString[PERF_TOKEN_SIZE]; - UINT8 *Ptr; - UINT32 Index; - UINT64 Ticker; - UINT64 Freq; - UINT32 Duration; - UINTN LogEntryKey; - CONST VOID *Handle; - CONST CHAR8 *Token; - CONST CHAR8 *Module; - UINT64 StartTicker; - UINT64 EndTicker; - UINT64 StartValue; - UINT64 EndValue; - BOOLEAN CountUp; - UINTN VarSize; - BOOLEAN Found; - - // - // Record the performance data for End of BDS - // - PERF_END(NULL, "BDS", NULL, 0); - - // - // Retrieve time stamp count as early as possible - // - Ticker =3D GetPerformanceCounter (); - - Freq =3D GetPerformanceCounterProperties (&StartValue, &EndValue); - =20 - Freq =3D DivU64x32 (Freq, 1000); - - mBmPerfHeader.CpuFreq =3D Freq; - - // - // Record BDS raw performance data - // - if (EndValue >=3D StartValue) { - mBmPerfHeader.BDSRaw =3D Ticker - StartValue; - CountUp =3D TRUE; - } else { - mBmPerfHeader.BDSRaw =3D StartValue - Ticker; - CountUp =3D FALSE; - } - - // - // Reset the entry count - // - mBmPerfHeader.Count =3D 0; - - if (mBmAcpiLowMemoryBase =3D=3D 0x0FFFFFFFF) { - VarSize =3D sizeof (EFI_PHYSICAL_ADDRESS); - Status =3D gRT->GetVariable ( - L"PerfDataMemAddr", - &gPerformanceProtocolGuid, - NULL, - &VarSize, - &mBmAcpiLowMemoryBase - ); - if (EFI_ERROR (Status)) { - // - // Fail to get the variable, return. - // - return; - } - } - - // - // Put Detailed performance data into memory - // - Handles =3D NULL; - Status =3D gBS->LocateHandleBuffer ( - AllHandles, - NULL, - NULL, - &NoHandles, - &Handles - ); - if (EFI_ERROR (Status)) { - return ; - } - - Ptr =3D (UINT8 *) ((UINT32) mBmAcpiLowMemoryBase + sizeof (PERF_H= EADER)); - LimitCount =3D (UINT32) (PERF_DATA_MAX_LENGTH - sizeof (PERF_HEADER)) / = sizeof (PERF_DATA); - - // - // Get performance data - // - LogEntryKey =3D 0; - while ((LogEntryKey =3D GetPerformanceMeasurement ( - LogEntryKey, - &Handle, - &Token, - &Module, - &StartTicker, - &EndTicker)) !=3D 0) { - if (EndTicker !=3D 0) { - if (StartTicker =3D=3D 1) { - StartTicker =3D StartValue; - } - if (EndTicker =3D=3D 1) { - EndTicker =3D StartValue; - } - Ticker =3D CountUp ? (EndTicker - StartTicker) : (StartTicker - EndT= icker); - - Duration =3D (UINT32) DivU64x32 (Ticker, (UINT32) Freq); - if (Duration =3D=3D 0) { - continue; - } - - ZeroMem (&mBmPerfData, sizeof (PERF_DATA)); - - mBmPerfData.Duration =3D Duration; - - // - // See if the Handle is in the handle buffer - // - Found =3D FALSE; - for (Index =3D 0; Index < NoHandles; Index++) { - if (Handle =3D=3D Handles[Index]) { - BmGetNameFromHandle (Handles[Index], GaugeString, PERF_TOKEN_SIZ= E); - AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, GaugeString); - Found =3D TRUE; - break; - } - } - - if (!Found) { - AsciiStrnCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, Token, PERF_TOK= EN_LENGTH); - } - - CopyMem (Ptr, &mBmPerfData, sizeof (PERF_DATA)); - Ptr +=3D sizeof (PERF_DATA); - - mBmPerfHeader.Count++; - if (mBmPerfHeader.Count =3D=3D LimitCount) { - goto Done; - } - } - } - -Done: - - FreePool (Handles); - - mBmPerfHeader.Signiture =3D PERFORMANCE_SIGNATURE; - - // - // Put performance data to Reserved memory - // - CopyMem ( - (UINTN *) (UINTN) mBmAcpiLowMemoryBase, - &mBmPerfHeader, - sizeof (PERF_HEADER) - ); - - return ; -} diff --git a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h b/MdeModu= lePkg/Library/UefiBootManagerLib/InternalBm.h index 0224bd3..ed0cd16 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h @@ -49,11 +49,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITH= ER EXPRESS OR IMPLIED. #include =20 #include #include #include -#include #include =20 #include #include #include @@ -183,26 +182,10 @@ BmGetFreeOptionNumber ( IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE LoadOptionType, OUT UINT16 *FreeOptionNumber ); =20 /** - - Writes performance data of booting into the allocated memory. - OS can process these records. - - @param Event The triggered event. - @param Context Context for this event. - -**/ -VOID -EFIAPI -BmWriteBootToOsPerformanceData ( - IN EFI_EVENT Event, - IN VOID *Context - ); - -/** This routine adjust the memory information for different memory type and=20 save them into the variables for next boot. It resets the system when memory information is updated and the current boot option belongs to boot category instead of application category. It doesn't count the reserved memory occupied by RAM Disk. diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf= b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf index ad4901d..1adffd7 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf +++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf @@ -3,11 +3,11 @@ # # The implementation provides richful library functions supporting load o= ption # manipulation, hotkey registration, UEFI boot, connect/disconnect, conso= le # manipulation, driver health checking and etc. # -# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at # http://opensource.org/licenses/bsd-license.php @@ -31,11 +31,10 @@ # # VALID_ARCHITECTURES =3D IA32 X64 IPF EBC # =20 [Sources] - BmPerformance.c BmConnect.c BmMisc.c BmConsole.c BmBoot.c BmBootDescription.c @@ -84,11 +83,10 @@ ## SOMETIMES_CONSUMES ## Variable:L"ConIn" (The device path of console i= n device) ## SOMETIMES_CONSUMES ## Variable:L"ConOut" (The device path of console = out device) ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error ou= t device) gEfiGlobalVariableGuid =20 - gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## V= ariable:L"PerfDataMemAddr" (The ACPI address of performance data) gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## G= UID gEfiDiskInfoAhciInterfaceGuid ## SOMETIMES_CONSUMES ## G= UID gEfiDiskInfoIdeInterfaceGuid ## SOMETIMES_CONSUMES ## G= UID gEfiDiskInfoScsiInterfaceGuid ## SOMETIMES_CONSUMES ## G= UID gEfiDiskInfoSdMmcInterfaceGuid ## SOMETIMES_CONSUMES ## G= UID --=20 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel