* [patch 0/3] Remove the useless pref codes
@ 2018-01-24 8:01 Dandan Bi
2018-01-24 8:01 ` [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code Dandan Bi
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Dandan Bi @ 2018-01-24 8:01 UTC (permalink / raw)
To: edk2-devel; +Cc: Eric Dong, Laszlo Ersek, Liming Gao, Ruiyu Ni, Star Zeng
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: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Dandan Bi (3):
UefiCpuPkg/S3Resume: Remove useless pref code
MdeModulePkg/BdsDxe: Remove useless Pref Code
MdeModulePkg/UefiBootManagerLib: Remove the useless pref codes
MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 30 +-
.../Library/UefiBootManagerLib/BmPerformance.c | 317 ---------------------
.../Library/UefiBootManagerLib/InternalBm.h | 1 -
.../UefiBootManagerLib/UefiBootManagerLib.inf | 4 +-
MdeModulePkg/Universal/BdsDxe/Bds.h | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 57 +---
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 131 ---------
.../Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 3 +-
9 files changed, 32 insertions(+), 517 deletions(-)
delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
--
1.9.5.msysgit.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code
2018-01-24 8:01 [patch 0/3] Remove the useless pref codes Dandan Bi
@ 2018-01-24 8:01 ` Dandan Bi
2018-01-24 15:48 ` Laszlo Ersek
2018-01-24 8:01 ` [patch 2/3] MdeModulePkg/BdsDxe: Remove useless Pref Code Dandan Bi
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Dandan Bi @ 2018-01-24 8:01 UTC (permalink / raw)
To: edk2-devel; +Cc: Eric Dong, Laszlo Ersek, Liming Gao
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: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
---
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 131 ---------------------
.../Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 3 +-
2 files changed, 1 insertion(+), 133 deletions(-)
diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
index d7d2a4d..4d77689 100644
--- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
+++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
@@ -20,11 +20,10 @@
#include <PiPei.h>
#include <Guid/AcpiS3Context.h>
#include <Guid/BootScriptExecutorVariable.h>
-#include <Guid/Performance.h>
#include <Guid/ExtendedFirmwarePerformance.h>
#include <Guid/EndOfS3Resume.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Ppi/S3Resume2.h>
#include <Ppi/SmmAccess.h>
@@ -284,136 +283,10 @@ GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT mGdtEntries[] = {
GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR mGdt = {
sizeof (mGdtEntries) - 1,
(UINTN) mGdtEntries
};
-/**
- Performance measure function to get S3 detailed performance data.
-
- This function will getS3 detailed performance data and saved in pre-reserved ACPI memory.
-**/
-VOID
-WriteToOsS3PerformanceData (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS mAcpiLowMemoryBase;
- PERF_HEADER *PerfHeader;
- PERF_DATA *PerfData;
- UINT64 Ticker;
- UINTN Index;
- EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
- UINTN VarSize;
- UINTN LogEntryKey;
- CONST VOID *Handle;
- CONST CHAR8 *Token;
- CONST CHAR8 *Module;
- UINT64 StartTicker;
- UINT64 EndTicker;
- UINT64 StartValue;
- UINT64 EndValue;
- BOOLEAN CountUp;
- UINT64 Freq;
-
- //
- // Retrieve time stamp count as early as possible
- //
- Ticker = GetPerformanceCounter ();
-
- Freq = GetPerformanceCounterProperties (&StartValue, &EndValue);
-
- Freq = DivU64x32 (Freq, 1000);
-
- Status = PeiServicesLocatePpi (
- &gEfiPeiReadOnlyVariable2PpiGuid,
- 0,
- NULL,
- (VOID **) &VariableServices
- );
- if (EFI_ERROR (Status)) {
- return;
- }
-
- VarSize = sizeof (EFI_PHYSICAL_ADDRESS);
- Status = VariableServices->GetVariable (
- VariableServices,
- L"PerfDataMemAddr",
- &gPerformanceProtocolGuid,
- NULL,
- &VarSize,
- &mAcpiLowMemoryBase
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "Fail to retrieve variable to log S3 performance data \n"));
- return;
- }
-
- PerfHeader = (PERF_HEADER *) (UINTN) mAcpiLowMemoryBase;
-
- if (PerfHeader->Signiture != PERFORMANCE_SIGNATURE) {
- DEBUG ((EFI_D_ERROR, "Performance data in ACPI memory get corrupted! \n"));
- return;
- }
-
- //
- // Record total S3 resume time.
- //
- if (EndValue >= StartValue) {
- PerfHeader->S3Resume = Ticker - StartValue;
- CountUp = TRUE;
- } else {
- PerfHeader->S3Resume = StartValue - Ticker;
- CountUp = FALSE;
- }
-
- //
- // Get S3 detailed performance data
- //
- Index = 0;
- LogEntryKey = 0;
- while ((LogEntryKey = GetPerformanceMeasurement (
- LogEntryKey,
- &Handle,
- &Token,
- &Module,
- &StartTicker,
- &EndTicker)) != 0) {
- if (EndTicker != 0) {
- PerfData = &PerfHeader->S3Entry[Index];
-
- //
- // Use File Handle to specify the different performance log for PEIM.
- // File Handle is the base address of PEIM FFS file.
- //
- if ((AsciiStrnCmp (Token, "PEIM", PEI_PERFORMANCE_STRING_SIZE) == 0) && (Handle != NULL)) {
- AsciiSPrint (PerfData->Token, PERF_TOKEN_LENGTH, "0x%11p", Handle);
- } else {
- AsciiStrnCpyS (PerfData->Token, PERF_TOKEN_SIZE, Token, PERF_TOKEN_LENGTH);
- }
- if (StartTicker == 1) {
- StartTicker = StartValue;
- }
- if (EndTicker == 1) {
- EndTicker = StartValue;
- }
- Ticker = CountUp? (EndTicker - StartTicker) : (StartTicker - EndTicker);
- PerfData->Duration = (UINT32) DivU64x32 (Ticker, (UINT32) Freq);
-
- //
- // Only Record > 1ms performance data so that more big performance can be recorded.
- //
- if ((Ticker > Freq) && (++Index >= PERF_PEI_ENTRY_MAX_NUM)) {
- //
- // Reach the maximum number of PEI performance log entries.
- //
- break;
- }
- }
- }
- PerfHeader->S3EntryNum = (UINT32) Index;
-}
/**
The function will check if current waking vector is long mode.
@param AcpiS3Context a pointer to a structure of ACPI_S3_CONTEXT
@@ -602,14 +475,10 @@ S3ResumeBootOs (
//
// report status code on S3 resume
//
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_OS_WAKE);
- PERF_CODE (
- WriteToOsS3PerformanceData ();
- );
-
AsmTransferControl = (ASM_TRANSFER_CONTROL)(UINTN)PeiS3ResumeState->AsmTransferControl;
if (Facs->XFirmwareWakingVector != 0) {
//
// Switch to native waking vector
//
diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
index 15fa2d1..9522ede 100644
--- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
+++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
@@ -3,11 +3,11 @@
#
# This module works with StandAloneBootScriptExecutor to S3 resume to OS.
# This module will excute the boot script saved during last boot and after that,
# control is passed to OS waking up handler.
#
-# Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
#
# 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
@@ -71,11 +71,10 @@
PrintLib
[Guids]
gEfiBootScriptExecutorVariableGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
gEfiBootScriptExecutorContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
- gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr"
## SOMETIMES_CONSUMES ## HOB
## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
gEfiAcpiVariableGuid
gEfiAcpiS3ContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
gEdkiiEndOfS3ResumeGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Used to do smm communication
--
1.9.5.msysgit.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [patch 2/3] MdeModulePkg/BdsDxe: Remove useless Pref Code
2018-01-24 8:01 [patch 0/3] Remove the useless pref codes Dandan Bi
2018-01-24 8:01 ` [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code Dandan Bi
@ 2018-01-24 8:01 ` Dandan Bi
2018-01-25 4:54 ` Ni, Ruiyu
2018-01-24 8:01 ` [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes Dandan Bi
2018-01-25 4:58 ` [patch 0/3] Remove the " Zeng, Star
3 siblings, 1 reply; 10+ messages in thread
From: Dandan Bi @ 2018-01-24 8:01 UTC (permalink / raw)
To: edk2-devel; +Cc: Liming Gao, Ruiyu Ni, Star Zeng
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 <liming.gao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
---
MdeModulePkg/Universal/BdsDxe/Bds.h | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 57 +-------------------------------
3 files changed, 3 insertions(+), 60 deletions(-)
diff --git a/MdeModulePkg/Universal/BdsDxe/Bds.h b/MdeModulePkg/Universal/BdsDxe/Bds.h
index 5658e61..63d961f 100644
--- a/MdeModulePkg/Universal/BdsDxe/Bds.h
+++ b/MdeModulePkg/Universal/BdsDxe/Bds.h
@@ -1,9 +1,9 @@
/** @file
Head file for BDS Architectural Protocol implementation
-Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
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
@@ -16,11 +16,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define _BDS_MODULE_H_
#include <Uefi.h>
#include <Guid/GlobalVariable.h>
#include <Guid/ConnectConInEvent.h>
-#include <Guid/Performance.h>
#include <Guid/StatusCodeDataTypeVariable.h>
#include <Guid/EventGroup.h>
#include <Protocol/Bds.h>
#include <Protocol/LoadedImage.h>
diff --git a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
index a00b442..b8c5aa9 100644
--- a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+++ b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
@@ -3,11 +3,11 @@
#
# When DxeCore dispatching all DXE driver, this module will produce architecture protocol
# gEfiBdsArchProtocolGuid. After DxeCore finish dispatching, DxeCore will invoke Entry
# interface of protocol gEfiBdsArchProtocolGuid, then BDS phase is entered.
#
-# Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
# 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
#
@@ -76,11 +76,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)
gConnectConInEventGuid ## SOMETIMES_CONSUMES ## Event
gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
- gPerformanceProtocolGuid ## SOMETIMES_PRODUCES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data)
gEfiEventReadyToBootGuid ## CONSUMES ## Event
[Protocols]
gEfiBdsArchProtocolGuid ## PRODUCES
gEfiSimpleTextInputExProtocolGuid ## CONSUMES
diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
index 2b24755..3191a98 100644
--- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
+++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
@@ -3,11 +3,11 @@
When this module was dispatched by DxeCore, gEfiBdsArchProtocolGuid will be installed
which contains interface of BdsEntry.
After DxeCore finish DXE phase, gEfiBdsArchProtocolGuid->BdsEntry will be invoked
to enter BDS phase.
-Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
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
@@ -633,61 +633,10 @@ BdsFormalizeEfiGlobalVariable (
//
BdsFormalizeOSIndicationVariable ();
}
/**
-
- Allocate a block of memory that will contain performance data to OS.
-
-**/
-VOID
-BdsAllocateMemoryForPerformanceData (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS AcpiLowMemoryBase;
- EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
-
- AcpiLowMemoryBase = 0x0FFFFFFFFULL;
-
- //
- // Allocate a block of memory that will contain performance data to OS.
- //
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiReservedMemoryType,
- EFI_SIZE_TO_PAGES (PERF_DATA_MAX_LENGTH),
- &AcpiLowMemoryBase
- );
- if (!EFI_ERROR (Status)) {
- //
- // Save the pointer to variable for use in S3 resume.
- //
- Status = BdsDxeSetVariableAndReportStatusCodeOnError (
- L"PerfDataMemAddr",
- &gPerformanceProtocolGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- sizeof (EFI_PHYSICAL_ADDRESS),
- &AcpiLowMemoryBase
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "[Bds] PerfDataMemAddr (%08x) cannot be saved to NV storage.\n", AcpiLowMemoryBase));
- }
- //
- // Mark L"PerfDataMemAddr" variable to read-only if the Variable Lock protocol exists
- // Still lock it even the variable cannot be saved to prevent it's set by 3rd party code.
- //
- Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock);
- if (!EFI_ERROR (Status)) {
- Status = VariableLock->RequestToLock (VariableLock, L"PerfDataMemAddr", &gPerformanceProtocolGuid);
- ASSERT_EFI_ERROR (Status);
- }
- }
-}
-
-/**
Enter an infinite loop of calling the Boot Manager Menu.
This is a last resort alternative to BdsEntry() giving up for good. This
function never returns.
@@ -778,14 +727,10 @@ BdsEntry (
//
PERF_END (NULL, "DXE", NULL, 0);
PERF_START (NULL, "BDS", NULL, 0);
DEBUG ((EFI_D_INFO, "[Bds] Entry...\n"));
- PERF_CODE (
- BdsAllocateMemoryForPerformanceData ();
- );
-
//
// Fill in FirmwareVendor and FirmwareRevision from PCDs
//
FirmwareVendor = (CHAR16 *) PcdGetPtr (PcdFirmwareVendor);
gST->FirmwareVendor = AllocateRuntimeCopyPool (StrSize (FirmwareVendor), FirmwareVendor);
--
1.9.5.msysgit.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes
2018-01-24 8:01 [patch 0/3] Remove the useless pref codes Dandan Bi
2018-01-24 8:01 ` [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code Dandan Bi
2018-01-24 8:01 ` [patch 2/3] MdeModulePkg/BdsDxe: Remove useless Pref Code Dandan Bi
@ 2018-01-24 8:01 ` Dandan Bi
2018-01-25 4:55 ` Ni, Ruiyu
2018-01-25 4:58 ` [patch 0/3] Remove the " Zeng, Star
3 siblings, 1 reply; 10+ messages in thread
From: Dandan Bi @ 2018-01-24 8:01 UTC (permalink / raw)
To: edk2-devel; +Cc: Liming Gao, Ruiyu Ni, Star Zeng
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 <liming.gao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
---
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.<BR>
+Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
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.<BR>
-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 <Protocol/DeferredImageLoad.h>
#include <Guid/MemoryTypeInformation.h>
#include <Guid/FileInfo.h>
#include <Guid/GlobalVariable.h>
-#include <Guid/Performance.h>
#include <Guid/StatusCodeDataTypeVariable.h>
#include <Library/PrintLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
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.<BR>
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
# 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
--
1.9.5.msysgit.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code
2018-01-24 8:01 ` [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code Dandan Bi
@ 2018-01-24 15:48 ` Laszlo Ersek
2018-01-24 15:49 ` Laszlo Ersek
0 siblings, 1 reply; 10+ messages in thread
From: Laszlo Ersek @ 2018-01-24 15:48 UTC (permalink / raw)
To: Dandan Bi, edk2-devel; +Cc: Eric Dong, Liming Gao
On 01/24/18 09:01, 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: Eric Dong <eric.dong@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Dandan Bi <dandan.bi@intel.com>
> ---
> UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 131 ---------------------
> .../Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 3 +-
> 2 files changed, 1 insertion(+), 133 deletions(-)
>
> diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
> index d7d2a4d..4d77689 100644
> --- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
> +++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
> @@ -20,11 +20,10 @@
>
> #include <PiPei.h>
>
> #include <Guid/AcpiS3Context.h>
> #include <Guid/BootScriptExecutorVariable.h>
> -#include <Guid/Performance.h>
> #include <Guid/ExtendedFirmwarePerformance.h>
> #include <Guid/EndOfS3Resume.h>
> #include <Ppi/ReadOnlyVariable2.h>
> #include <Ppi/S3Resume2.h>
> #include <Ppi/SmmAccess.h>
> @@ -284,136 +283,10 @@ GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT mGdtEntries[] = {
> GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR mGdt = {
> sizeof (mGdtEntries) - 1,
> (UINTN) mGdtEntries
> };
>
> -/**
> - Performance measure function to get S3 detailed performance data.
> -
> - This function will getS3 detailed performance data and saved in pre-reserved ACPI memory.
> -**/
> -VOID
> -WriteToOsS3PerformanceData (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PHYSICAL_ADDRESS mAcpiLowMemoryBase;
> - PERF_HEADER *PerfHeader;
> - PERF_DATA *PerfData;
> - UINT64 Ticker;
> - UINTN Index;
> - EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
> - UINTN VarSize;
> - UINTN LogEntryKey;
> - CONST VOID *Handle;
> - CONST CHAR8 *Token;
> - CONST CHAR8 *Module;
> - UINT64 StartTicker;
> - UINT64 EndTicker;
> - UINT64 StartValue;
> - UINT64 EndValue;
> - BOOLEAN CountUp;
> - UINT64 Freq;
> -
> - //
> - // Retrieve time stamp count as early as possible
> - //
> - Ticker = GetPerformanceCounter ();
> -
> - Freq = GetPerformanceCounterProperties (&StartValue, &EndValue);
> -
> - Freq = DivU64x32 (Freq, 1000);
> -
> - Status = PeiServicesLocatePpi (
> - &gEfiPeiReadOnlyVariable2PpiGuid,
> - 0,
> - NULL,
> - (VOID **) &VariableServices
> - );
> - if (EFI_ERROR (Status)) {
> - return;
> - }
> -
> - VarSize = sizeof (EFI_PHYSICAL_ADDRESS);
> - Status = VariableServices->GetVariable (
> - VariableServices,
> - L"PerfDataMemAddr",
> - &gPerformanceProtocolGuid,
> - NULL,
> - &VarSize,
> - &mAcpiLowMemoryBase
> - );
> - if (EFI_ERROR (Status)) {
> - DEBUG ((EFI_D_ERROR, "Fail to retrieve variable to log S3 performance data \n"));
> - return;
> - }
> -
> - PerfHeader = (PERF_HEADER *) (UINTN) mAcpiLowMemoryBase;
> -
> - if (PerfHeader->Signiture != PERFORMANCE_SIGNATURE) {
> - DEBUG ((EFI_D_ERROR, "Performance data in ACPI memory get corrupted! \n"));
> - return;
> - }
> -
> - //
> - // Record total S3 resume time.
> - //
> - if (EndValue >= StartValue) {
> - PerfHeader->S3Resume = Ticker - StartValue;
> - CountUp = TRUE;
> - } else {
> - PerfHeader->S3Resume = StartValue - Ticker;
> - CountUp = FALSE;
> - }
> -
> - //
> - // Get S3 detailed performance data
> - //
> - Index = 0;
> - LogEntryKey = 0;
> - while ((LogEntryKey = GetPerformanceMeasurement (
> - LogEntryKey,
> - &Handle,
> - &Token,
> - &Module,
> - &StartTicker,
> - &EndTicker)) != 0) {
> - if (EndTicker != 0) {
> - PerfData = &PerfHeader->S3Entry[Index];
> -
> - //
> - // Use File Handle to specify the different performance log for PEIM.
> - // File Handle is the base address of PEIM FFS file.
> - //
> - if ((AsciiStrnCmp (Token, "PEIM", PEI_PERFORMANCE_STRING_SIZE) == 0) && (Handle != NULL)) {
> - AsciiSPrint (PerfData->Token, PERF_TOKEN_LENGTH, "0x%11p", Handle);
> - } else {
> - AsciiStrnCpyS (PerfData->Token, PERF_TOKEN_SIZE, Token, PERF_TOKEN_LENGTH);
> - }
> - if (StartTicker == 1) {
> - StartTicker = StartValue;
> - }
> - if (EndTicker == 1) {
> - EndTicker = StartValue;
> - }
> - Ticker = CountUp? (EndTicker - StartTicker) : (StartTicker - EndTicker);
> - PerfData->Duration = (UINT32) DivU64x32 (Ticker, (UINT32) Freq);
> -
> - //
> - // Only Record > 1ms performance data so that more big performance can be recorded.
> - //
> - if ((Ticker > Freq) && (++Index >= PERF_PEI_ENTRY_MAX_NUM)) {
> - //
> - // Reach the maximum number of PEI performance log entries.
> - //
> - break;
> - }
> - }
> - }
> - PerfHeader->S3EntryNum = (UINT32) Index;
> -}
>
> /**
> The function will check if current waking vector is long mode.
>
> @param AcpiS3Context a pointer to a structure of ACPI_S3_CONTEXT
> @@ -602,14 +475,10 @@ S3ResumeBootOs (
> //
> // report status code on S3 resume
> //
> REPORT_STATUS_CODE (EFI_PROGRESS_CODE, EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_OS_WAKE);
>
> - PERF_CODE (
> - WriteToOsS3PerformanceData ();
> - );
> -
> AsmTransferControl = (ASM_TRANSFER_CONTROL)(UINTN)PeiS3ResumeState->AsmTransferControl;
> if (Facs->XFirmwareWakingVector != 0) {
> //
> // Switch to native waking vector
> //
> diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
> index 15fa2d1..9522ede 100644
> --- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
> +++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
> @@ -3,11 +3,11 @@
> #
> # This module works with StandAloneBootScriptExecutor to S3 resume to OS.
> # This module will excute the boot script saved during last boot and after that,
> # control is passed to OS waking up handler.
> #
> -# Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
> # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> #
> # 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
> @@ -71,11 +71,10 @@
> PrintLib
>
> [Guids]
> gEfiBootScriptExecutorVariableGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
> gEfiBootScriptExecutorContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
> - gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr"
> ## SOMETIMES_CONSUMES ## HOB
> ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
> gEfiAcpiVariableGuid
> gEfiAcpiS3ContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
> gEdkiiEndOfS3ResumeGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Used to do smm communication
>
Looks good to me.
Specifically for use in OVMF, this logic has always been inactive, since
we don't yet have PEI-phase (r/o) variable access.
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Thanks
Laszlo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code
2018-01-24 15:48 ` Laszlo Ersek
@ 2018-01-24 15:49 ` Laszlo Ersek
0 siblings, 0 replies; 10+ messages in thread
From: Laszlo Ersek @ 2018-01-24 15:49 UTC (permalink / raw)
To: Dandan Bi, edk2-devel; +Cc: Eric Dong, Liming Gao
small update to my review comments:
On 01/24/18 16:48, Laszlo Ersek wrote:
> On 01/24/18 09:01, 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.
Again, please reference the TianoCore BZ and/or commit hashes and/or
mailing list subjects/URLs, for specifying "new performance infrastructure".
With that change, my R-b stands.
Thanks
Laszlo
>>
>> Cc: Eric Dong <eric.dong@intel.com>
>> Cc: Laszlo Ersek <lersek@redhat.com>
>> Cc: Liming Gao <liming.gao@intel.com>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Dandan Bi <dandan.bi@intel.com>
>> ---
>> UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 131 ---------------------
>> .../Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 3 +-
>> 2 files changed, 1 insertion(+), 133 deletions(-)
>>
>> diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
>> index d7d2a4d..4d77689 100644
>> --- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
>> +++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
>> @@ -20,11 +20,10 @@
>>
>> #include <PiPei.h>
>>
>> #include <Guid/AcpiS3Context.h>
>> #include <Guid/BootScriptExecutorVariable.h>
>> -#include <Guid/Performance.h>
>> #include <Guid/ExtendedFirmwarePerformance.h>
>> #include <Guid/EndOfS3Resume.h>
>> #include <Ppi/ReadOnlyVariable2.h>
>> #include <Ppi/S3Resume2.h>
>> #include <Ppi/SmmAccess.h>
>> @@ -284,136 +283,10 @@ GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT mGdtEntries[] = {
>> GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR mGdt = {
>> sizeof (mGdtEntries) - 1,
>> (UINTN) mGdtEntries
>> };
>>
>> -/**
>> - Performance measure function to get S3 detailed performance data.
>> -
>> - This function will getS3 detailed performance data and saved in pre-reserved ACPI memory.
>> -**/
>> -VOID
>> -WriteToOsS3PerformanceData (
>> - VOID
>> - )
>> -{
>> - EFI_STATUS Status;
>> - EFI_PHYSICAL_ADDRESS mAcpiLowMemoryBase;
>> - PERF_HEADER *PerfHeader;
>> - PERF_DATA *PerfData;
>> - UINT64 Ticker;
>> - UINTN Index;
>> - EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
>> - UINTN VarSize;
>> - UINTN LogEntryKey;
>> - CONST VOID *Handle;
>> - CONST CHAR8 *Token;
>> - CONST CHAR8 *Module;
>> - UINT64 StartTicker;
>> - UINT64 EndTicker;
>> - UINT64 StartValue;
>> - UINT64 EndValue;
>> - BOOLEAN CountUp;
>> - UINT64 Freq;
>> -
>> - //
>> - // Retrieve time stamp count as early as possible
>> - //
>> - Ticker = GetPerformanceCounter ();
>> -
>> - Freq = GetPerformanceCounterProperties (&StartValue, &EndValue);
>> -
>> - Freq = DivU64x32 (Freq, 1000);
>> -
>> - Status = PeiServicesLocatePpi (
>> - &gEfiPeiReadOnlyVariable2PpiGuid,
>> - 0,
>> - NULL,
>> - (VOID **) &VariableServices
>> - );
>> - if (EFI_ERROR (Status)) {
>> - return;
>> - }
>> -
>> - VarSize = sizeof (EFI_PHYSICAL_ADDRESS);
>> - Status = VariableServices->GetVariable (
>> - VariableServices,
>> - L"PerfDataMemAddr",
>> - &gPerformanceProtocolGuid,
>> - NULL,
>> - &VarSize,
>> - &mAcpiLowMemoryBase
>> - );
>> - if (EFI_ERROR (Status)) {
>> - DEBUG ((EFI_D_ERROR, "Fail to retrieve variable to log S3 performance data \n"));
>> - return;
>> - }
>> -
>> - PerfHeader = (PERF_HEADER *) (UINTN) mAcpiLowMemoryBase;
>> -
>> - if (PerfHeader->Signiture != PERFORMANCE_SIGNATURE) {
>> - DEBUG ((EFI_D_ERROR, "Performance data in ACPI memory get corrupted! \n"));
>> - return;
>> - }
>> -
>> - //
>> - // Record total S3 resume time.
>> - //
>> - if (EndValue >= StartValue) {
>> - PerfHeader->S3Resume = Ticker - StartValue;
>> - CountUp = TRUE;
>> - } else {
>> - PerfHeader->S3Resume = StartValue - Ticker;
>> - CountUp = FALSE;
>> - }
>> -
>> - //
>> - // Get S3 detailed performance data
>> - //
>> - Index = 0;
>> - LogEntryKey = 0;
>> - while ((LogEntryKey = GetPerformanceMeasurement (
>> - LogEntryKey,
>> - &Handle,
>> - &Token,
>> - &Module,
>> - &StartTicker,
>> - &EndTicker)) != 0) {
>> - if (EndTicker != 0) {
>> - PerfData = &PerfHeader->S3Entry[Index];
>> -
>> - //
>> - // Use File Handle to specify the different performance log for PEIM.
>> - // File Handle is the base address of PEIM FFS file.
>> - //
>> - if ((AsciiStrnCmp (Token, "PEIM", PEI_PERFORMANCE_STRING_SIZE) == 0) && (Handle != NULL)) {
>> - AsciiSPrint (PerfData->Token, PERF_TOKEN_LENGTH, "0x%11p", Handle);
>> - } else {
>> - AsciiStrnCpyS (PerfData->Token, PERF_TOKEN_SIZE, Token, PERF_TOKEN_LENGTH);
>> - }
>> - if (StartTicker == 1) {
>> - StartTicker = StartValue;
>> - }
>> - if (EndTicker == 1) {
>> - EndTicker = StartValue;
>> - }
>> - Ticker = CountUp? (EndTicker - StartTicker) : (StartTicker - EndTicker);
>> - PerfData->Duration = (UINT32) DivU64x32 (Ticker, (UINT32) Freq);
>> -
>> - //
>> - // Only Record > 1ms performance data so that more big performance can be recorded.
>> - //
>> - if ((Ticker > Freq) && (++Index >= PERF_PEI_ENTRY_MAX_NUM)) {
>> - //
>> - // Reach the maximum number of PEI performance log entries.
>> - //
>> - break;
>> - }
>> - }
>> - }
>> - PerfHeader->S3EntryNum = (UINT32) Index;
>> -}
>>
>> /**
>> The function will check if current waking vector is long mode.
>>
>> @param AcpiS3Context a pointer to a structure of ACPI_S3_CONTEXT
>> @@ -602,14 +475,10 @@ S3ResumeBootOs (
>> //
>> // report status code on S3 resume
>> //
>> REPORT_STATUS_CODE (EFI_PROGRESS_CODE, EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_OS_WAKE);
>>
>> - PERF_CODE (
>> - WriteToOsS3PerformanceData ();
>> - );
>> -
>> AsmTransferControl = (ASM_TRANSFER_CONTROL)(UINTN)PeiS3ResumeState->AsmTransferControl;
>> if (Facs->XFirmwareWakingVector != 0) {
>> //
>> // Switch to native waking vector
>> //
>> diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
>> index 15fa2d1..9522ede 100644
>> --- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
>> +++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
>> @@ -3,11 +3,11 @@
>> #
>> # This module works with StandAloneBootScriptExecutor to S3 resume to OS.
>> # This module will excute the boot script saved during last boot and after that,
>> # control is passed to OS waking up handler.
>> #
>> -# Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
>> +# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
>> # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
>> #
>> # 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
>> @@ -71,11 +71,10 @@
>> PrintLib
>>
>> [Guids]
>> gEfiBootScriptExecutorVariableGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
>> gEfiBootScriptExecutorContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
>> - gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr"
>> ## SOMETIMES_CONSUMES ## HOB
>> ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
>> gEfiAcpiVariableGuid
>> gEfiAcpiS3ContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
>> gEdkiiEndOfS3ResumeGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Used to do smm communication
>>
>
> Looks good to me.
>
> Specifically for use in OVMF, this logic has always been inactive, since
> we don't yet have PEI-phase (r/o) variable access.
>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch 2/3] MdeModulePkg/BdsDxe: Remove useless Pref Code
2018-01-24 8:01 ` [patch 2/3] MdeModulePkg/BdsDxe: Remove useless Pref Code Dandan Bi
@ 2018-01-25 4:54 ` Ni, Ruiyu
0 siblings, 0 replies; 10+ messages in thread
From: Ni, Ruiyu @ 2018-01-25 4:54 UTC (permalink / raw)
To: Dandan Bi, edk2-devel; +Cc: Liming Gao, Star Zeng
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 <liming.gao@intel.com>
> Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> Cc: Star Zeng <star.zeng@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Dandan Bi <dandan.bi@intel.com>
> ---
> MdeModulePkg/Universal/BdsDxe/Bds.h | 3 +-
> MdeModulePkg/Universal/BdsDxe/BdsDxe.inf | 3 +-
> MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 57 +-------------------------------
> 3 files changed, 3 insertions(+), 60 deletions(-)
>
> diff --git a/MdeModulePkg/Universal/BdsDxe/Bds.h b/MdeModulePkg/Universal/BdsDxe/Bds.h
> index 5658e61..63d961f 100644
> --- a/MdeModulePkg/Universal/BdsDxe/Bds.h
> +++ b/MdeModulePkg/Universal/BdsDxe/Bds.h
> @@ -1,9 +1,9 @@
> /** @file
> Head file for BDS Architectural Protocol implementation
>
> -Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> 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
>
> @@ -16,11 +16,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> #define _BDS_MODULE_H_
>
> #include <Uefi.h>
> #include <Guid/GlobalVariable.h>
> #include <Guid/ConnectConInEvent.h>
> -#include <Guid/Performance.h>
> #include <Guid/StatusCodeDataTypeVariable.h>
> #include <Guid/EventGroup.h>
>
> #include <Protocol/Bds.h>
> #include <Protocol/LoadedImage.h>
> diff --git a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> index a00b442..b8c5aa9 100644
> --- a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> +++ b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> @@ -3,11 +3,11 @@
> #
> # When DxeCore dispatching all DXE driver, this module will produce architecture protocol
> # gEfiBdsArchProtocolGuid. After DxeCore finish dispatching, DxeCore will invoke Entry
> # interface of protocol gEfiBdsArchProtocolGuid, then BDS phase is entered.
> #
> -# Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
> # 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
> #
> @@ -76,11 +76,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)
> gConnectConInEventGuid ## SOMETIMES_CONSUMES ## Event
> gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
> - gPerformanceProtocolGuid ## SOMETIMES_PRODUCES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data)
> gEfiEventReadyToBootGuid ## CONSUMES ## Event
>
> [Protocols]
> gEfiBdsArchProtocolGuid ## PRODUCES
> gEfiSimpleTextInputExProtocolGuid ## CONSUMES
> diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> index 2b24755..3191a98 100644
> --- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> +++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> @@ -3,11 +3,11 @@
> When this module was dispatched by DxeCore, gEfiBdsArchProtocolGuid will be installed
> which contains interface of BdsEntry.
> After DxeCore finish DXE phase, gEfiBdsArchProtocolGuid->BdsEntry will be invoked
> to enter BDS phase.
>
> -Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
> 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
> @@ -633,61 +633,10 @@ BdsFormalizeEfiGlobalVariable (
> //
> BdsFormalizeOSIndicationVariable ();
> }
>
> /**
> -
> - Allocate a block of memory that will contain performance data to OS.
> -
> -**/
> -VOID
> -BdsAllocateMemoryForPerformanceData (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> - EFI_PHYSICAL_ADDRESS AcpiLowMemoryBase;
> - EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock;
> -
> - AcpiLowMemoryBase = 0x0FFFFFFFFULL;
> -
> - //
> - // Allocate a block of memory that will contain performance data to OS.
> - //
> - Status = gBS->AllocatePages (
> - AllocateMaxAddress,
> - EfiReservedMemoryType,
> - EFI_SIZE_TO_PAGES (PERF_DATA_MAX_LENGTH),
> - &AcpiLowMemoryBase
> - );
> - if (!EFI_ERROR (Status)) {
> - //
> - // Save the pointer to variable for use in S3 resume.
> - //
> - Status = BdsDxeSetVariableAndReportStatusCodeOnError (
> - L"PerfDataMemAddr",
> - &gPerformanceProtocolGuid,
> - EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
> - sizeof (EFI_PHYSICAL_ADDRESS),
> - &AcpiLowMemoryBase
> - );
> - if (EFI_ERROR (Status)) {
> - DEBUG ((EFI_D_ERROR, "[Bds] PerfDataMemAddr (%08x) cannot be saved to NV storage.\n", AcpiLowMemoryBase));
> - }
> - //
> - // Mark L"PerfDataMemAddr" variable to read-only if the Variable Lock protocol exists
> - // Still lock it even the variable cannot be saved to prevent it's set by 3rd party code.
> - //
> - Status = gBS->LocateProtocol (&gEdkiiVariableLockProtocolGuid, NULL, (VOID **) &VariableLock);
> - if (!EFI_ERROR (Status)) {
> - Status = VariableLock->RequestToLock (VariableLock, L"PerfDataMemAddr", &gPerformanceProtocolGuid);
> - ASSERT_EFI_ERROR (Status);
> - }
> - }
> -}
> -
> -/**
> Enter an infinite loop of calling the Boot Manager Menu.
>
> This is a last resort alternative to BdsEntry() giving up for good. This
> function never returns.
>
> @@ -778,14 +727,10 @@ BdsEntry (
> //
> PERF_END (NULL, "DXE", NULL, 0);
> PERF_START (NULL, "BDS", NULL, 0);
> DEBUG ((EFI_D_INFO, "[Bds] Entry...\n"));
>
> - PERF_CODE (
> - BdsAllocateMemoryForPerformanceData ();
> - );
> -
> //
> // Fill in FirmwareVendor and FirmwareRevision from PCDs
> //
> FirmwareVendor = (CHAR16 *) PcdGetPtr (PcdFirmwareVendor);
> gST->FirmwareVendor = AllocateRuntimeCopyPool (StrSize (FirmwareVendor), FirmwareVendor);
>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
--
Thanks,
Ray
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes
2018-01-24 8:01 ` [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes Dandan Bi
@ 2018-01-25 4:55 ` Ni, Ruiyu
0 siblings, 0 replies; 10+ messages in thread
From: Ni, Ruiyu @ 2018-01-25 4:55 UTC (permalink / raw)
To: Dandan Bi, edk2-devel; +Cc: Liming Gao, Star Zeng
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 <liming.gao@intel.com>
> Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> Cc: Star Zeng <star.zeng@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Dandan Bi <dandan.bi@intel.com>
> ---
> 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.<BR>
> +Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
> 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.<BR>
> -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 <Protocol/DeferredImageLoad.h>
>
> #include <Guid/MemoryTypeInformation.h>
> #include <Guid/FileInfo.h>
> #include <Guid/GlobalVariable.h>
> -#include <Guid/Performance.h>
> #include <Guid/StatusCodeDataTypeVariable.h>
>
> #include <Library/PrintLib.h>
> #include <Library/DebugLib.h>
> #include <Library/BaseMemoryLib.h>
> 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.<BR>
> +# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> # (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> # 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 <ruiyu.ni@intel.com>
--
Thanks,
Ray
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch 0/3] Remove the useless pref codes
2018-01-24 8:01 [patch 0/3] Remove the useless pref codes Dandan Bi
` (2 preceding siblings ...)
2018-01-24 8:01 ` [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes Dandan Bi
@ 2018-01-25 4:58 ` Zeng, Star
2018-01-25 5:51 ` Bi, Dandan
3 siblings, 1 reply; 10+ messages in thread
From: Zeng, Star @ 2018-01-25 4:58 UTC (permalink / raw)
To: Bi, Dandan, edk2-devel@lists.01.org
Cc: Ni, Ruiyu, Laszlo Ersek, Dong, Eric, Gao, Liming, Zeng, Star
Could we also remove the related definitions in MdeModulePkg\Include\Guid\Performance.h?
//
// The data structure for performance data in ACPI memory.
//
#define PERFORMANCE_SIGNATURE SIGNATURE_32 ('P', 'e', 'r', 'f')
#define PERF_TOKEN_SIZE 28
#define PERF_TOKEN_LENGTH (PERF_TOKEN_SIZE - 1)
#define PERF_PEI_ENTRY_MAX_NUM 50
#define PERF_DATA_MAX_LENGTH 0x4000
typedef struct {
CHAR8 Token[PERF_TOKEN_SIZE];
UINT32 Duration;
} PERF_DATA;
typedef struct {
UINT64 BootToOs;
UINT64 S3Resume;
UINT32 S3EntryNum;
PERF_DATA S3Entry[PERF_PEI_ENTRY_MAX_NUM];
UINT64 CpuFreq;
UINT64 BDSRaw;
UINT32 Count;
UINT32 Signiture;
} PERF_HEADER;
Thanks,
Star
-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Dandan Bi
Sent: Wednesday, January 24, 2018 4:02 PM
To: edk2-devel@lists.01.org
Cc: Ni, Ruiyu <ruiyu.ni@intel.com>; Zeng, Star <star.zeng@intel.com>; Laszlo Ersek <lersek@redhat.com>; Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>
Subject: [edk2] [patch 0/3] Remove the useless pref codes
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: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Dandan Bi (3):
UefiCpuPkg/S3Resume: Remove useless pref code
MdeModulePkg/BdsDxe: Remove useless Pref Code
MdeModulePkg/UefiBootManagerLib: Remove the useless pref codes
MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 30 +-
.../Library/UefiBootManagerLib/BmPerformance.c | 317 ---------------------
.../Library/UefiBootManagerLib/InternalBm.h | 1 -
.../UefiBootManagerLib/UefiBootManagerLib.inf | 4 +-
MdeModulePkg/Universal/BdsDxe/Bds.h | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 57 +---
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 131 ---------
.../Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 3 +-
9 files changed, 32 insertions(+), 517 deletions(-) delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
--
1.9.5.msysgit.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch 0/3] Remove the useless pref codes
2018-01-25 4:58 ` [patch 0/3] Remove the " Zeng, Star
@ 2018-01-25 5:51 ` Bi, Dandan
0 siblings, 0 replies; 10+ messages in thread
From: Bi, Dandan @ 2018-01-25 5:51 UTC (permalink / raw)
To: Zeng, Star, edk2-devel@lists.01.org
Cc: Ni, Ruiyu, Laszlo Ersek, Dong, Eric, Gao, Liming
Hi Star,
I am not sure. Since these definitions are still used in other packages such as Intelframeworkmodulepkg. If we want to remove them, we must clean up all the old perf related codes in Edk2 code base to avoid build block issues.
Thanks,
Dandan
-----Original Message-----
From: Zeng, Star
Sent: Thursday, January 25, 2018 12:59 PM
To: Bi, Dandan <dandan.bi@intel.com>; edk2-devel@lists.01.org
Cc: Ni, Ruiyu <ruiyu.ni@intel.com>; Laszlo Ersek <lersek@redhat.com>; Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>; Zeng, Star <star.zeng@intel.com>
Subject: RE: [edk2] [patch 0/3] Remove the useless pref codes
Could we also remove the related definitions in MdeModulePkg\Include\Guid\Performance.h?
//
// The data structure for performance data in ACPI memory.
//
#define PERFORMANCE_SIGNATURE SIGNATURE_32 ('P', 'e', 'r', 'f')
#define PERF_TOKEN_SIZE 28
#define PERF_TOKEN_LENGTH (PERF_TOKEN_SIZE - 1)
#define PERF_PEI_ENTRY_MAX_NUM 50
#define PERF_DATA_MAX_LENGTH 0x4000
typedef struct {
CHAR8 Token[PERF_TOKEN_SIZE];
UINT32 Duration;
} PERF_DATA;
typedef struct {
UINT64 BootToOs;
UINT64 S3Resume;
UINT32 S3EntryNum;
PERF_DATA S3Entry[PERF_PEI_ENTRY_MAX_NUM];
UINT64 CpuFreq;
UINT64 BDSRaw;
UINT32 Count;
UINT32 Signiture;
} PERF_HEADER;
Thanks,
Star
-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Dandan Bi
Sent: Wednesday, January 24, 2018 4:02 PM
To: edk2-devel@lists.01.org
Cc: Ni, Ruiyu <ruiyu.ni@intel.com>; Zeng, Star <star.zeng@intel.com>; Laszlo Ersek <lersek@redhat.com>; Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>
Subject: [edk2] [patch 0/3] Remove the useless pref codes
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: Eric Dong <eric.dong@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Dandan Bi (3):
UefiCpuPkg/S3Resume: Remove useless pref code
MdeModulePkg/BdsDxe: Remove useless Pref Code
MdeModulePkg/UefiBootManagerLib: Remove the useless pref codes
MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 30 +-
.../Library/UefiBootManagerLib/BmPerformance.c | 317 ---------------------
.../Library/UefiBootManagerLib/InternalBm.h | 1 -
.../UefiBootManagerLib/UefiBootManagerLib.inf | 4 +-
MdeModulePkg/Universal/BdsDxe/Bds.h | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf | 3 +-
MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 57 +---
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 131 ---------
.../Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf | 3 +-
9 files changed, 32 insertions(+), 517 deletions(-) delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
--
1.9.5.msysgit.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-01-25 5:46 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-24 8:01 [patch 0/3] Remove the useless pref codes Dandan Bi
2018-01-24 8:01 ` [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code Dandan Bi
2018-01-24 15:48 ` Laszlo Ersek
2018-01-24 15:49 ` Laszlo Ersek
2018-01-24 8:01 ` [patch 2/3] MdeModulePkg/BdsDxe: Remove useless Pref Code Dandan Bi
2018-01-25 4:54 ` Ni, Ruiyu
2018-01-24 8:01 ` [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes Dandan Bi
2018-01-25 4:55 ` Ni, Ruiyu
2018-01-25 4:58 ` [patch 0/3] Remove the " Zeng, Star
2018-01-25 5:51 ` Bi, Dandan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox