From: Laszlo Ersek <lersek@redhat.com>
To: Dandan Bi <dandan.bi@intel.com>, edk2-devel@lists.01.org
Cc: Eric Dong <eric.dong@intel.com>, Liming Gao <liming.gao@intel.com>
Subject: Re: [patch 1/3] UefiCpuPkg/S3Resume: Remove useless pref code
Date: Wed, 24 Jan 2018 16:48:28 +0100 [thread overview]
Message-ID: <00ecccd6-6e43-9433-7db1-244adc00f0d7@redhat.com> (raw)
In-Reply-To: <1516780916-6364-2-git-send-email-dandan.bi@intel.com>
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
next prev parent reply other threads:[~2018-01-24 15:43 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=00ecccd6-6e43-9433-7db1-244adc00f0d7@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox