public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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:49:49 +0100	[thread overview]
Message-ID: <cbfa6873-5026-9edb-ffc0-54cbf4c15c3c@redhat.com> (raw)
In-Reply-To: <00ecccd6-6e43-9433-7db1-244adc00f0d7@redhat.com>

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>


  reply	other threads:[~2018-01-24 15:44 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
2018-01-24 15:49     ` Laszlo Ersek [this message]
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=cbfa6873-5026-9edb-ffc0-54cbf4c15c3c@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