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] -=-=-=-=-=-=-=-=-=-=-=-