From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=ruiyu.ni@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (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 C304A21E25686 for ; Wed, 24 Jan 2018 20:50:11 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Jan 2018 20:55:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,409,1511856000"; d="scan'208";a="25267724" Received: from ray-dev.ccr.corp.intel.com (HELO [10.239.9.19]) ([10.239.9.19]) by fmsmga001.fm.intel.com with ESMTP; 24 Jan 2018 20:55:39 -0800 To: Dandan Bi , edk2-devel@lists.01.org Cc: Liming Gao , Star Zeng References: <1516780916-6364-1-git-send-email-dandan.bi@intel.com> <1516780916-6364-4-git-send-email-dandan.bi@intel.com> From: "Ni, Ruiyu" Message-ID: <4bd4bde5-6e13-4554-68cb-75d5fb8c2e41@Intel.com> Date: Thu, 25 Jan 2018 12:55:38 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <1516780916-6364-4-git-send-email-dandan.bi@intel.com> Subject: Re: [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove 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: , X-List-Received-Date: Thu, 25 Jan 2018 04:50:12 -0000 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 1/24/2018 4:01 PM, Dandan Bi wrote: > Our new performance infrastructure 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 > --- > MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 30 +- > .../Library/UefiBootManagerLib/BmPerformance.c | 317 --------------------- > .../Library/UefiBootManagerLib/InternalBm.h | 1 - > .../UefiBootManagerLib/UefiBootManagerLib.inf | 4 +- > 4 files changed, 28 insertions(+), 324 deletions(-) > delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c > > diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c > index d684482..eb8f3b5 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c > +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c > @@ -1,9 +1,9 @@ > /** @file > Library functions which relates with booting. > > -Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.
> +Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP
> 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 > @@ -26,10 +26,34 @@ EFI_BOOT_MANAGER_LEGACY_BOOT mBmLegacyBoot = NULL; > /// > EFI_GUID mBmHardDriveBootVariableGuid = { 0xfab7e9e1, 0x39dd, 0x4f2b, { 0x84, 0x08, 0xe2, 0x0e, 0x90, 0x6c, 0xb6, 0xde } }; > EFI_GUID mBmAutoCreateBootOptionGuid = { 0x8108ac4e, 0x9f11, 0x4d59, { 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2 } }; > > /** > + > + The end of BDS perf code. > + > + @param Event The triggered event. > + @param Context Context for this event. > + > +**/ > +VOID > +EFIAPI > +BmEndOfBdsPrefCode ( > + 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. > > @param RefreshLegacyBootOption The function pointer to create all the legacy boot options. > @param LegacyBoot The function pointer to boot the legacy boot option. > **/ > @@ -1820,11 +1844,11 @@ EfiBootManagerBoot ( > // > // Create an event to be signalled when Legacy Boot occurs to write performance data. > // > Status = EfiCreateEventLegacyBootEx( > TPL_NOTIFY, > - BmWriteBootToOsPerformanceData, > + BmEndOfBdsPrefCode, > NULL, > &LegacyBootEvent > ); > ASSERT_EFI_ERROR (Status); > ); > @@ -1861,11 +1885,11 @@ EfiBootManagerBoot ( > > // > // Write boot to OS performance data for UEFI boot > // > PERF_CODE ( > - BmWriteBootToOsPerformanceData (NULL, NULL); > + BmEndOfBdsPrefCode (NULL, NULL); > ); > > REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart)); > > Status = gBS->StartImage (ImageHandle, &BootOption->ExitDataSize, &BootOption->ExitData); > diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c b/MdeModulePkg/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 IMPLIED. > - > -**/ > - > -#include "InternalBm.h" > - > -PERF_HEADER mBmPerfHeader; > -PERF_DATA mBmPerfData; > -EFI_PHYSICAL_ADDRESS mBmAcpiLowMemoryBase = 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 logger. > - @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 == NULL) { > - AsciiStrCpyS (GaugeString, StringSize, " "); > - } else { > - StartIndex = 0; > - for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++) > - ; > - > - for (Index = 0; PdbFileName[Index] != 0; Index++) { > - if ((PdbFileName[Index] == '\\') || (PdbFileName[Index] == '/')) { > - StartIndex = Index + 1; > - } > - > - if (PdbFileName[Index] == '.') { > - EndIndex = Index; > - } > - } > - > - Index1 = 0; > - for (Index = StartIndex; Index < EndIndex; Index++) { > - GaugeString[Index1] = PdbFileName[Index]; > - Index1++; > - if (Index1 == StringSize - 1) { > - break; > - } > - } > - > - GaugeString[Index1] = 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 logger. > - @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 = gBS->HandleProtocol ( > - Handle, > - &gEfiLoadedImageProtocolGuid, > - (VOID **) &Image > - ); > - > - if (EFI_ERROR (Status)) { > - Status = 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 = gBS->HandleProtocol ( > - DriverBinding->ImageHandle, > - &gEfiLoadedImageProtocolGuid, > - (VOID **) &Image > - ); > - } > - > - PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase); > - > - if (PdbFileName != 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 = GetPerformanceCounter (); > - > - Freq = GetPerformanceCounterProperties (&StartValue, &EndValue); > - > - Freq = DivU64x32 (Freq, 1000); > - > - mBmPerfHeader.CpuFreq = Freq; > - > - // > - // Record BDS raw performance data > - // > - if (EndValue >= StartValue) { > - mBmPerfHeader.BDSRaw = Ticker - StartValue; > - CountUp = TRUE; > - } else { > - mBmPerfHeader.BDSRaw = StartValue - Ticker; > - CountUp = FALSE; > - } > - > - // > - // Reset the entry count > - // > - mBmPerfHeader.Count = 0; > - > - if (mBmAcpiLowMemoryBase == 0x0FFFFFFFF) { > - VarSize = sizeof (EFI_PHYSICAL_ADDRESS); > - Status = 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 = NULL; > - Status = gBS->LocateHandleBuffer ( > - AllHandles, > - NULL, > - NULL, > - &NoHandles, > - &Handles > - ); > - if (EFI_ERROR (Status)) { > - return ; > - } > - > - Ptr = (UINT8 *) ((UINT32) mBmAcpiLowMemoryBase + sizeof (PERF_HEADER)); > - LimitCount = (UINT32) (PERF_DATA_MAX_LENGTH - sizeof (PERF_HEADER)) / sizeof (PERF_DATA); > - > - // > - // Get performance data > - // > - LogEntryKey = 0; > - while ((LogEntryKey = GetPerformanceMeasurement ( > - LogEntryKey, > - &Handle, > - &Token, > - &Module, > - &StartTicker, > - &EndTicker)) != 0) { > - if (EndTicker != 0) { > - if (StartTicker == 1) { > - StartTicker = StartValue; > - } > - if (EndTicker == 1) { > - EndTicker = StartValue; > - } > - Ticker = CountUp ? (EndTicker - StartTicker) : (StartTicker - EndTicker); > - > - Duration = (UINT32) DivU64x32 (Ticker, (UINT32) Freq); > - if (Duration == 0) { > - continue; > - } > - > - ZeroMem (&mBmPerfData, sizeof (PERF_DATA)); > - > - mBmPerfData.Duration = Duration; > - > - // > - // See if the Handle is in the handle buffer > - // > - Found = FALSE; > - for (Index = 0; Index < NoHandles; Index++) { > - if (Handle == Handles[Index]) { > - BmGetNameFromHandle (Handles[Index], GaugeString, PERF_TOKEN_SIZE); > - AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, GaugeString); > - Found = TRUE; > - break; > - } > - } > - > - if (!Found) { > - AsciiStrnCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, Token, PERF_TOKEN_LENGTH); > - } > - > - CopyMem (Ptr, &mBmPerfData, sizeof (PERF_DATA)); > - Ptr += sizeof (PERF_DATA); > - > - mBmPerfHeader.Count++; > - if (mBmPerfHeader.Count == LimitCount) { > - goto Done; > - } > - } > - } > - > -Done: > - > - FreePool (Handles); > - > - mBmPerfHeader.Signiture = 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/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > index 0224bd3..64c8d15 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > @@ -49,11 +49,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > #include > > #include > #include > #include > -#include > #include > > #include > #include > #include > 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 option > # manipulation, hotkey registration, UEFI boot, connect/disconnect, console > # 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 BSD 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 = IA32 X64 IPF EBC > # > > [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 in device) > ## SOMETIMES_CONSUMES ## Variable:L"ConOut" (The device path of console out device) > ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device) > gEfiGlobalVariableGuid > > - gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data) > gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID > gEfiDiskInfoAhciInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > gEfiDiskInfoIdeInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > gEfiDiskInfoScsiInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > gEfiDiskInfoSdMmcInterfaceGuid ## SOMETIMES_CONSUMES ## GUID > Reviewed-by: Ruiyu Ni -- Thanks, Ray