The change is good to me. Reviewed-by: Liming Gao <gaolim...@byosoft.com.cn>

> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 duntan
> 发送时间: 2023年9月1日 12:07
> 收件人: devel@edk2.groups.io; Tan, Dun <dun....@intel.com>
> 抄送: Wang, Jian J <jian.j.w...@intel.com>; Gao, Liming
> <gaolim...@byosoft.com.cn>; Ni, Ray <ray...@intel.com>
> 主题: Re: [edk2-devel] [Patch V2]
> MdeModulePkg/DxeCorePerformanceLib:fix smm perf issue
> 
> Hi Jian and Liming,
> 
> Could you please help to review this patch?
> 
> Thanks,
> Dun
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan
> Sent: Wednesday, August 30, 2023 3:36 PM
> To: devel@edk2.groups.io
> Cc: Wang, Jian J <jian.j.w...@intel.com>; Gao, Liming
> <gaolim...@byosoft.com.cn>; Ni, Ray <ray...@intel.com>
> Subject: [edk2-devel] [Patch V2] MdeModulePkg/DxeCorePerformanceLib:fix
> smm perf issue
> 
> Fix smm perf issue in DxeCorePerformanceLib. In current code logic, total
> SMM perf record is copied multiple times to FPDT table if multiple
> ReadyToBoot events are signaled. This patch changes the function
> InternalGetSmmPerfData() to only get newly generated Smm perf data. Then
> previous generated Smm perf data won't be copied to FPDT again.
> 
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4470
> Signed-off-by: Dun Tan <dun....@intel.com>
> Cc: Jian J Wang <jian.j.w...@intel.com>
> Cc: Liming Gao <gaolim...@byosoft.com.cn>
> Cc: Ray Ni <ray...@intel.com>
> ---
>  MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c
> | 32 +++++++++++++++++++-------------
>  1 file changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git
> a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
> c
> b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
> c
> index ef14bc0738..0a994be6a5 100644
> ---
> a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
> c
> +++
> b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
> c
> @@ -10,7 +10,7 @@
>    This library is mainly used by DxeCore to start performance logging to
> ensure that
>    Performance Protocol is installed at the very beginning of DXE phase.
> 
> -Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2023, Intel Corporation. All rights reserved.<BR>
>  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -73,6 +73,7 @@ UINT8    *mPerformancePointer  = NULL;
>  UINT8    *mBootRecordBuffer    = NULL;
>  BOOLEAN  mLockInsertRecord     = FALSE;
>  CHAR8    *mDevicePathString    = NULL;
> +UINTN    mSmmBootRecordOffset  = 0;
> 
>  EFI_DEVICE_PATH_TO_TEXT_PROTOCOL  *mDevicePathToText = NULL;
> 
> @@ -236,6 +237,7 @@ InternalGetSmmPerfData (
>    VOID
> *SmmBootRecordData;
>    UINTN
> SmmBootRecordDataSize;
>    UINTN                                    ReservedMemSize;
> +  UINTN
> SmmBootRecordDataRetrieved;
> 
>    //
>    // Collect boot records from SMM drivers.
> @@ -297,28 +299,32 @@ InternalGetSmmPerfData (
>            }
> 
>            //
> -          // Get all boot records
> +          // Get boot records starting from mSmmBootRecordOffset
>            //
> -          SmmCommData->Function =
> SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA_BY_OFFSET;
> -          SmmBootRecordDataSize = SmmCommData->BootRecordSize;
> -          SmmBootRecordData     = AllocateZeroPool
> (SmmBootRecordDataSize);
> +          SmmCommData->Function         =
> SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA_BY_OFFSET;
> +          SmmCommData->BootRecordOffset = mSmmBootRecordOffset;
> +          SmmBootRecordDataSize         =
> SmmCommData->BootRecordSize - mSmmBootRecordOffset;
> +          SmmBootRecordData             = AllocateZeroPool
> (SmmBootRecordDataSize);
> +          SmmBootRecordDataRetrieved    = 0;
>            ASSERT (SmmBootRecordData  != NULL);
> -          SmmCommData->BootRecordOffset = 0;
> -          SmmCommData->BootRecordData   = (VOID
> *)((UINTN)SmmCommMemRegion->PhysicalStart +
> SMM_BOOT_RECORD_COMM_SIZE);
> -          SmmCommData->BootRecordSize   = ReservedMemSize -
> SMM_BOOT_RECORD_COMM_SIZE;
> -          while (SmmCommData->BootRecordOffset <
> SmmBootRecordDataSize) {
> +          SmmCommData->BootRecordData = (VOID
> *)((UINTN)SmmCommMemRegion->PhysicalStart +
> SMM_BOOT_RECORD_COMM_SIZE);
> +          SmmCommData->BootRecordSize = ReservedMemSize -
> SMM_BOOT_RECORD_COMM_SIZE;
> +          while (SmmBootRecordDataRetrieved <
> SmmBootRecordDataSize) {
>              Status = Communication->Communicate (Communication,
> SmmBootRecordCommBuffer, &CommSize);
>              ASSERT_EFI_ERROR (Status);
>              ASSERT_EFI_ERROR (SmmCommData->ReturnStatus);
> -            if (SmmCommData->BootRecordOffset +
> SmmCommData->BootRecordSize > SmmBootRecordDataSize) {
> -              CopyMem ((UINT8 *)SmmBootRecordData +
> SmmCommData->BootRecordOffset, SmmCommData->BootRecordData,
> SmmBootRecordDataSize - SmmCommData->BootRecordOffset);
> +            if (SmmBootRecordDataRetrieved +
> SmmCommData->BootRecordSize > SmmBootRecordDataSize) {
> +              CopyMem ((UINT8 *)SmmBootRecordData +
> + SmmBootRecordDataRetrieved, SmmCommData->BootRecordData,
> + SmmBootRecordDataSize - SmmBootRecordDataRetrieved);
>              } else {
> -              CopyMem ((UINT8 *)SmmBootRecordData +
> SmmCommData->BootRecordOffset, SmmCommData->BootRecordData,
> SmmCommData->BootRecordSize);
> +              CopyMem ((UINT8 *)SmmBootRecordData +
> + SmmBootRecordDataRetrieved, SmmCommData->BootRecordData,
> + SmmCommData->BootRecordSize);
>              }
> 
> -            SmmCommData->BootRecordOffset =
> SmmCommData->BootRecordOffset + SmmCommData->BootRecordSize;
> +            SmmBootRecordDataRetrieved    +=
> SmmCommData->BootRecordSize;
> +            SmmCommData->BootRecordOffset +=
> + SmmCommData->BootRecordSize;
>            }
> 
> +          mSmmBootRecordOffset = SmmCommData->BootRecordOffset;
> +
>            *SmmPerfData     = SmmBootRecordData;
>            *SmmPerfDataSize = SmmBootRecordDataSize;
>          }
> --
> 2.31.1.windows.1
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108271): https://edk2.groups.io/g/devel/message/108271
Mute This Topic: https://groups.io/mt/101162182/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to