From: "gaoliming via groups.io" <gaoliming=byosoft.com.cn@groups.io>
To: <devel@edk2.groups.io>, <dun.tan@intel.com>
Cc: "'Wang, Jian J'" <jian.j.wang@intel.com>, "'Ni, Ray'" <ray.ni@intel.com>
Subject: 回复: [edk2-devel] [Patch V2] MdeModulePkg/DxeCorePerformanceLib:fix smm perf issue
Date: Tue, 5 Sep 2023 10:33:34 +0800 [thread overview]
Message-ID: <078d01d9dfa1$5e05d6f0$1a1184d0$@byosoft.com.cn> (raw)
In-Reply-To: <BN9PR11MB5483AC629B2F8C5893980982E5E4A@BN9PR11MB5483.namprd11.prod.outlook.com>
The change is good to me. Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 duntan
> 发送时间: 2023年9月1日 12:07
> 收件人: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
> 抄送: Wang, Jian J <jian.j.wang@intel.com>; Gao, Liming
> <gaoliming@byosoft.com.cn>; Ni, Ray <ray.ni@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.wang@intel.com>; Gao, Liming
> <gaoliming@byosoft.com.cn>; Ni, Ray <ray.ni@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.tan@intel.com>
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Ray Ni <ray.ni@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/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
prev parent reply other threads:[~2023-09-05 2:33 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1780190419D49EE1.31776@groups.io>
2023-09-01 4:06 ` [edk2-devel] [Patch V2] MdeModulePkg/DxeCorePerformanceLib:fix smm perf issue duntan
2023-09-05 2:33 ` gaoliming via groups.io [this message]
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='078d01d9dfa1$5e05d6f0$1a1184d0$@byosoft.com.cn' \
--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