mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/S3Resume: Remove useless perf code
V2: Just update the commit message to reference the hash value of new performance infrastructure. Our new performance infrastructure (edk2 trunk commit hash value: SHA-1:73fef64f14
~ SHA-1:115eae650b
)can support to dump performance date form ACPI table in OS. So we can remove the old perf 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> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
7f0301e39a
commit
93fe14c2f7
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
#include <Guid/AcpiS3Context.h>
|
#include <Guid/AcpiS3Context.h>
|
||||||
#include <Guid/BootScriptExecutorVariable.h>
|
#include <Guid/BootScriptExecutorVariable.h>
|
||||||
#include <Guid/Performance.h>
|
|
||||||
#include <Guid/ExtendedFirmwarePerformance.h>
|
#include <Guid/ExtendedFirmwarePerformance.h>
|
||||||
#include <Guid/EndOfS3Resume.h>
|
#include <Guid/EndOfS3Resume.h>
|
||||||
#include <Ppi/ReadOnlyVariable2.h>
|
#include <Ppi/ReadOnlyVariable2.h>
|
||||||
|
@ -286,132 +285,6 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR mGdt = {
|
||||||
(UINTN) mGdtEntries
|
(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.
|
The function will check if current waking vector is long mode.
|
||||||
|
@ -604,10 +477,6 @@ S3ResumeBootOs (
|
||||||
//
|
//
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_OS_WAKE);
|
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;
|
AsmTransferControl = (ASM_TRANSFER_CONTROL)(UINTN)PeiS3ResumeState->AsmTransferControl;
|
||||||
if (Facs->XFirmwareWakingVector != 0) {
|
if (Facs->XFirmwareWakingVector != 0) {
|
||||||
//
|
//
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# This module will excute the boot script saved during last boot and after that,
|
# This module will excute the boot script saved during last boot and after that,
|
||||||
# control is passed to OS waking up handler.
|
# 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>
|
# Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials are
|
# This program and the accompanying materials are
|
||||||
|
@ -73,7 +73,6 @@
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiBootScriptExecutorVariableGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
|
gEfiBootScriptExecutorVariableGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
|
||||||
gEfiBootScriptExecutorContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
|
gEfiBootScriptExecutorContextGuid ## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
|
||||||
gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr"
|
|
||||||
## SOMETIMES_CONSUMES ## HOB
|
## SOMETIMES_CONSUMES ## HOB
|
||||||
## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
|
## SOMETIMES_CONSUMES ## UNDEFINED # LockBox
|
||||||
gEfiAcpiVariableGuid
|
gEfiAcpiVariableGuid
|
||||||
|
|
Loading…
Reference in New Issue