Sure. Pull request is created. https://github.com/tianocore/edk2/pull/2200
Thanks, Dandan > -----Original Message----- > From: gaoliming <[email protected]> > Sent: Friday, November 12, 2021 9:21 AM > To: [email protected]; Bi, Dandan <[email protected]> > Cc: Wu, Hao A <[email protected]>; Wang, Jian J <[email protected]> > Subject: 回复: [edk2-devel] [PATCH] MdeModulePkg/FPDT: Lock boot > performance table address variable at EndOfDxe > > Dandan and WuHao: > This patch has reviewed-by before soft feature freeze. Can you help merge > it? > > Thanks > Liming > > -----邮件原件----- > > 发件人: [email protected] <[email protected]> 代表 Dandan Bi > > 发送时间: 2021年10月11日 11:49 > > 收件人: [email protected] > > 抄送: Dandan Bi <[email protected]>; Liming Gao > > <[email protected]>; Hao A Wu <[email protected]>; Jian J > Wang > > <[email protected]> > > 主题: [edk2-devel] [PATCH] MdeModulePkg/FPDT: Lock boot performance > > table address variable at EndOfDxe > > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2957 > > > > 1. Allocate performance data table at EndOfDxe and then lock the varible > > which store the table address at EndOfDxe. > > > > 2. Enlarge PCD > > gEfiMdeModulePkgTokenSpaceGuid.PcdExtFpdtBootRecordPadSize > > from 0x20000 to 0x30000 in order to hold the Delta performance data > > between EndOfDxe and ReadyToBoot. > > > > 3. SMM performance data is collected by DXE modules through SMM > > communication > > at ReadyToBoot before. > > Now to do SMM communication twice, one for allocating the > performance > > size at EndOfDxe, another is at ReadyToBoot to get SMM performance > > data. > > > > 4. Make SmmCorePerformanceLib rather than FirmwarePerformanceSmm > to > > communicate > > with DxeCorePerformanceLib for SMM performance data and size. > > > > Cc: Liming Gao <[email protected]> > > Cc: Hao A Wu <[email protected]> > > Cc: Jian J Wang <[email protected]> > > Signed-off-by: Dandan Bi <[email protected]> > > Reviewed-by: Hao A Wu <[email protected]> > > --- > > .../DxeCorePerformanceLib.c | 132 +++++++++++---- > > .../DxeCorePerformanceLib.inf | 3 +- > > .../SmmCorePerformanceLib.c | 142 > > +++++++++++++---- > > .../SmmCorePerformanceLib.inf | 5 +- > > MdeModulePkg/MdeModulePkg.dec | 4 +- > > .../FirmwarePerformanceDxe.c | 90 +++++++++-- > > .../FirmwarePerformanceDxe.inf | 6 +- > > .../FirmwarePerformanceCommon.c | 150 +----------------- > > .../FirmwarePerformanceCommon.h | 17 +- > > .../FirmwarePerformanceSmm.inf | 4 +- > > .../FirmwarePerformanceStandaloneMm.c | 21 +-- > > .../FirmwarePerformanceStandaloneMm.inf | 4 +- > > .../FirmwarePerformanceTraditional.c | 21 +-- > > 13 files changed, 306 insertions(+), 293 deletions(-) > > > > diff --git > > > a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b. > > c > > > b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b. > > c > > index d378c59dd9..532b3f8c90 100644 > > --- > > > a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b. > > c > > +++ > > > b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b. > > 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 - 2018, Intel Corporation. All rights > > reserved.<BR> > > +Copyright (c) 2006 - 2021, Intel Corporation. All rights > > +reserved.<BR> > > (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -64,7 +64,7 @@ UINT32 mLoadImageCount = 0; > > UINT32 mPerformanceLength = 0; > > UINT32 mMaxPerformanceLength = 0; > > UINT32 mBootRecordSize = 0; > > -UINT32 mBootRecordMaxSize = 0; > > +UINTN mBootRecordMaxSize = 0; > > UINT32 mCachedLength = 0; > > > > BOOLEAN mFpdtBufferIsReported = FALSE; @@ -205,25 +205,26 @@ > > IsKnownID ( } > > > > /** > > - Allocate buffer for Boot Performance table. > > + This internal function dumps all the SMM performance data and size. > > > > - @return Status code. > > + @param SmmPerfData Smm Performance data. The buffer > > contain the SMM perf data is allocated by this function and caller > > needs > to > > free it. > > + @param SmmPerfDataSize Smm Performance data size. > > + @param SkipGetPerfData Skip to get performance data, just get > > the size. > > > > **/ > > -EFI_STATUS > > -AllocateBootPerformanceTable ( > > +VOID > > +InternalGetSmmPerfData ( > > + OUT VOID **SmmPerfData, > > + OUT UINTN *SmmPerfDataSize, > > + IN BOOLEAN SkipGetPerfData > > ) > > { > > EFI_STATUS Status; > > - UINTN Size; > > UINT8 > > *SmmBootRecordCommBuffer; > > EFI_SMM_COMMUNICATE_HEADER > > *SmmCommBufferHeader; > > SMM_BOOT_RECORD_COMMUNICATE *SmmCommData; > > UINTN CommSize; > > - UINTN > > BootPerformanceDataSize; > > - UINT8 *BootPerformanceData; > > EFI_SMM_COMMUNICATION_PROTOCOL *Communication; > > - FIRMWARE_PERFORMANCE_VARIABLE > > PerformanceVariable; > > EDKII_PI_SMM_COMMUNICATION_REGION_TABLE > > *SmmCommRegionTable; > > EFI_MEMORY_DESCRIPTOR > > *SmmCommMemRegion; > > UINTN Index; > > @@ -237,7 +238,6 @@ AllocateBootPerformanceTable ( > > SmmBootRecordCommBuffer = NULL; > > SmmCommData = NULL; > > SmmBootRecordData = NULL; > > - SmmBootRecordDataSize = 0; > > ReservedMemSize = 0; > > Status = gBS->LocateProtocol (&gEfiSmmCommunicationProtocolGuid, > > NULL, (VOID **) &Communication); > > if (!EFI_ERROR (Status)) { > > @@ -284,6 +284,10 @@ AllocateBootPerformanceTable ( > > Status = Communication->Communicate (Communication, > > SmmBootRecordCommBuffer, &CommSize); > > > > if (!EFI_ERROR (Status) && !EFI_ERROR > > (SmmCommData->ReturnStatus) && SmmCommData->BootRecordSize != > 0) { > > + if (SkipGetPerfData) { > > + *SmmPerfDataSize = SmmCommData->BootRecordSize; > > + return; > > + } > > // > > // Get all boot records > > // > > @@ -305,19 +309,45 @@ AllocateBootPerformanceTable ( > > } > > SmmCommData->BootRecordOffset = > > SmmCommData->BootRecordOffset + SmmCommData->BootRecordSize; > > } > > + *SmmPerfData = SmmBootRecordData; > > + *SmmPerfDataSize = SmmBootRecordDataSize; > > } > > } > > } > > } > > +} > > + > > +/** > > + Allocate buffer for Boot Performance table. > > + > > + @return Status code. > > + > > +**/ > > +EFI_STATUS > > +AllocateBootPerformanceTable ( > > + VOID > > + ) > > +{ > > + EFI_STATUS Status; > > + UINTN Size; > > + UINTN > > BootPerformanceDataSize; > > + UINT8 > > *BootPerformanceData; > > + FIRMWARE_PERFORMANCE_VARIABLE > > PerformanceVariable; > > + UINTN > > SmmBootRecordDataSize; > > + > > + SmmBootRecordDataSize = 0; > > + > > + // > > + // Get SMM performance data size at the point of EndOfDxe in order > > + to > > allocate the boot performance table. > > + // Will Get all the data at ReadyToBoot. > > + // > > + InternalGetSmmPerfData (NULL, &SmmBootRecordDataSize, TRUE); > > > > // > > // Prepare memory for Boot Performance table. > > // Boot Performance table includes BasicBoot record, and one or > > more appended Boot Records. > > // > > - BootPerformanceDataSize = sizeof (BOOT_PERFORMANCE_TABLE) + > > mPerformanceLength + PcdGet32 (PcdExtFpdtBootRecordPadSize); > > - if (SmmCommData != NULL && SmmBootRecordData != NULL) { > > - BootPerformanceDataSize += SmmBootRecordDataSize; > > - } > > + BootPerformanceDataSize = sizeof (BOOT_PERFORMANCE_TABLE) + > > mPerformanceLength + SmmBootRecordDataSize + PcdGet32 > > (PcdExtFpdtBootRecordPadSize); > > > > // > > // Try to allocate the same runtime buffer as last time boot. > > @@ -358,9 +388,6 @@ AllocateBootPerformanceTable ( > > DEBUG ((DEBUG_INFO, "DxeCorePerformanceLib: ACPI Boot > Performance > > Table address = 0x%x\n", mAcpiBootPerformanceTable)); > > > > if (mAcpiBootPerformanceTable == NULL) { > > - if (SmmCommData != NULL && SmmBootRecordData != NULL) { > > - FreePool (SmmBootRecordData); > > - } > > return EFI_OUT_OF_RESOURCES; > > } > > > > @@ -385,19 +412,10 @@ AllocateBootPerformanceTable ( > > mPerformanceLength = 0; > > mMaxPerformanceLength = 0; > > } > > - if (SmmCommData != NULL && SmmBootRecordData != NULL) { > > - // > > - // Fill Boot records from SMM drivers. > > - // > > - CopyMem (BootPerformanceData, SmmBootRecordData, > > SmmBootRecordDataSize); > > - FreePool (SmmBootRecordData); > > - mAcpiBootPerformanceTable->Header.Length = (UINT32) > > (mAcpiBootPerformanceTable->Header.Length + > SmmBootRecordDataSize); > > - BootPerformanceData = BootPerformanceData + > > SmmBootRecordDataSize; > > - } > > > > mBootRecordBuffer = (UINT8 *) mAcpiBootPerformanceTable; > > mBootRecordSize = mAcpiBootPerformanceTable->Header.Length; > > - mBootRecordMaxSize = mBootRecordSize + PcdGet32 > > (PcdExtFpdtBootRecordPadSize); > > + mBootRecordMaxSize = BootPerformanceDataSize; > > > > return EFI_SUCCESS; > > } > > @@ -1336,6 +1354,47 @@ ReportFpdtRecordBuffer ( > > } > > } > > > > +/** > > + Update Boot Performance table. > > + > > + @param Event The event of notify protocol. > > + @param Context Notify event context. > > + > > +**/ > > +VOID > > +EFIAPI > > +UpdateBootPerformanceTable ( > > + IN EFI_EVENT Event, > > + IN VOID *Context > > + ) > > +{ > > + VOID *SmmBootRecordData; > > + UINTN SmmBootRecordDataSize; > > + UINTN AppendSize; > > + UINT8 *FirmwarePerformanceTablePtr; > > + > > + // > > + // Get SMM performance data. > > + // > > + SmmBootRecordData = NULL; > > + InternalGetSmmPerfData (&SmmBootRecordData, > > &SmmBootRecordDataSize, FALSE); > > + > > + FirmwarePerformanceTablePtr = (UINT8 *) mAcpiBootPerformanceTable > > + mAcpiBootPerformanceTable->Header.Length; > > + > > + if (mAcpiBootPerformanceTable->Header.Length + > > SmmBootRecordDataSize > mBootRecordMaxSize) { > > + DEBUG ((DEBUG_INFO, "DxeCorePerformanceLib: No enough space to > > save all SMM boot performance data\n")); > > + AppendSize = mBootRecordMaxSize - > > mAcpiBootPerformanceTable->Header.Length; > > + } else { > > + AppendSize = SmmBootRecordDataSize; } if (SmmBootRecordData != > > + NULL) { > > + CopyMem (FirmwarePerformanceTablePtr, SmmBootRecordData, > > AppendSize); > > + mAcpiBootPerformanceTable->Header.Length += (UINT32) AppendSize; > > + mBootRecordSize += (UINT32) AppendSize; > > + FreePool (SmmBootRecordData); > > + } > > +} > > + > > /** > > The constructor function initializes Performance infrastructure for > > DXE phase. > > > > @@ -1358,6 +1417,7 @@ DxeCorePerformanceLibConstructor ( { > > EFI_STATUS Status; > > EFI_HANDLE Handle; > > + EFI_EVENT EndOfDxeEvent; > > EFI_EVENT ReadyToBootEvent; > > PERFORMANCE_PROPERTY *PerformanceProperty; > > > > @@ -1386,13 +1446,25 @@ DxeCorePerformanceLibConstructor ( > > ASSERT_EFI_ERROR (Status); > > > > // > > - // Register ReadyToBoot event to report StatusCode data > > + // Register EndOfDxe event to allocate the boot performance table > > + and > > report the table address through status code. > > // > > Status = gBS->CreateEventEx ( > > EVT_NOTIFY_SIGNAL, > > - TPL_CALLBACK, > > + TPL_NOTIFY, > > ReportFpdtRecordBuffer, > > NULL, > > + &gEfiEndOfDxeEventGroupGuid, > > + &EndOfDxeEvent > > + ); > > + > > + // > > + // Register ReadyToBoot event to update the boot performance table > > + for > > SMM performance data. > > + // > > + Status = gBS->CreateEventEx ( > > + EVT_NOTIFY_SIGNAL, > > + TPL_CALLBACK, > > + UpdateBootPerformanceTable, > > + NULL, > > &gEfiEventReadyToBootGuid, > > &ReadyToBootEvent > > ); > > diff --git > > > a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b.i > > nf > > > b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b.i > > nf > > index 1c1dcc60a6..599d4dea66 100644 > > --- > > > a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b.i > > nf > > +++ > > > b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLi > b.i > > nf > > @@ -9,7 +9,7 @@ > > # This library is mainly used by DxeCore to start performance > > logging to ensure that # Performance and PerformanceEx Protocol are > > installed at the very beginning of DXE phase. > > # > > -# Copyright (c) 2006 - 2018, Intel Corporation. All rights > > reserved.<BR> > > +# Copyright (c) 2006 - 2021, Intel Corporation. All rights > > +reserved.<BR> > > # (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> # > > SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -67,6 +67,7 @@ > > [Guids] > > gZeroGuid ## > > SOMETIMES_CONSUMES ## GUID > > gEfiFirmwarePerformanceGuid ## > > SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data > > gEdkiiFpdtExtendedFirmwarePerformanceGuid ## > > SOMETIMES_CONSUMES ## HOB # StatusCode Data > > + gEfiEndOfDxeEventGroupGuid ## CONSUMES > > ## Event > > gEfiEventReadyToBootGuid ## CONSUMES > > ## Event > > gEdkiiPiSmmCommunicationRegionTableGuid ## > > SOMETIMES_CONSUMES ## SystemTable > > gEdkiiPerformanceMeasurementProtocolGuid ## PRODUCES > > ## UNDEFINED # Install protocol > > diff --git > > > a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.c > > > b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.c > > index b4f22c14ae..d80f37e520 100644 > > --- > > > a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.c > > +++ > > > b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.c > > @@ -16,7 +16,7 @@ > > > > SmmPerformanceHandlerEx(), SmmPerformanceHandler() will receive > > untrusted input and do basic validation. > > > > -Copyright (c) 2011 - 2018, Intel Corporation. All rights > > reserved.<BR> > > +Copyright (c) 2011 - 2021, Intel Corporation. All rights > > +reserved.<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -48,6 +48,7 @@ CHAR8 *mPlatformLanguage = > > NULL; > > SPIN_LOCK mSmmFpdtLock; > > PERFORMANCE_PROPERTY mPerformanceProperty; > > UINT32 mCachedLength = 0; > > +UINT32 mBootRecordSize = 0; > > > > // > > // Interfaces for SMM PerformanceMeasurement Protocol. > > @@ -776,41 +777,116 @@ InsertFpdtRecord ( } > > > > /** > > - SmmReadyToBoot protocol notification event handler. > > + Communication service SMI Handler entry. > > > > - @param Protocol Points to the protocol's unique identifier > > - @param Interface Points to the interface instance > > - @param Handle The handle on which the interface was installed > > + This SMI handler provides services for report MM boot records. > > > > - @retval EFI_SUCCESS SmmReadyToBootCallback runs successfully > > + Caution: This function may receive untrusted input. > > + Communicate buffer and buffer size are external input, so this > > + function > will > > do basic validation. > > + > > + @param[in] DispatchHandle The unique handle assigned to this > > handler by SmiHandlerRegister(). > > + @param[in] RegisterContext Points to an optional handler context > > which was specified when the > > + handler was registered. > > + @param[in, out] CommBuffer A pointer to a collection of data in > > memory that will > > + be conveyed from a non-MM > > environment into an MM environment. > > + @param[in, out] CommBufferSize The size of the CommBuffer. > > + > > + @retval EFI_SUCCESS The interrupt was > > handled and quiesced. No other handlers > > + should still be > > called. > > + @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED The interrupt has > > been quiesced but other handlers should > > + still be called. > > + @retval EFI_WARN_INTERRUPT_SOURCE_PENDING The interrupt is > > still pending and other handlers should still > > + be called. > > + @retval EFI_INTERRUPT_PENDING The interrupt could > > not be quiesced. > > > > **/ > > EFI_STATUS > > EFIAPI > > -SmmReportFpdtRecordData ( > > - IN CONST EFI_GUID *Protocol, > > - IN VOID *Interface, > > - IN EFI_HANDLE Handle > > +FpdtSmiHandler ( > > + IN EFI_HANDLE DispatchHandle, > > + IN CONST VOID *RegisterContext, > > + IN OUT VOID *CommBuffer, > > + IN OUT UINTN *CommBufferSize > > ) > > { > > - UINT64 SmmBPDTddr; > > - > > - if (!mFpdtDataIsReported && mSmmBootPerformanceTable != NULL) { > > - SmmBPDTddr = (UINT64)(UINTN)mSmmBootPerformanceTable; > > - REPORT_STATUS_CODE_EX ( > > - EFI_PROGRESS_CODE, > > - EFI_SOFTWARE_SMM_DRIVER, > > - 0, > > - NULL, > > - &gEdkiiFpdtExtendedFirmwarePerformanceGuid, > > - &SmmBPDTddr, > > - sizeof (UINT64) > > + EFI_STATUS Status; > > + SMM_BOOT_RECORD_COMMUNICATE *SmmCommData; > > + UINTN BootRecordOffset; > > + UINTN BootRecordSize; > > + VOID *BootRecordData; > > + UINTN TempCommBufferSize; > > + UINT8 *BootRecordBuffer; > > + > > + // > > + // If input is invalid, stop processing this SMI // if > > + (CommBuffer == NULL || CommBufferSize == NULL) { > > + return EFI_SUCCESS; > > + } > > + > > + TempCommBufferSize = *CommBufferSize; > > + > > + if(TempCommBufferSize < sizeof > (SMM_BOOT_RECORD_COMMUNICATE)) > > { > > + return EFI_SUCCESS; > > + } > > + > > + if (!SmmIsBufferOutsideSmmValid ((UINTN)CommBuffer, > > TempCommBufferSize)) { > > + DEBUG ((DEBUG_ERROR, "FpdtSmiHandler: MM communication data > > buffer in MMRAM or overflow!\n")); > > + return EFI_SUCCESS; > > + } > > + > > + SmmCommData = > (SMM_BOOT_RECORD_COMMUNICATE*)CommBuffer; > > + > > + Status = EFI_SUCCESS; > > + > > + switch (SmmCommData->Function) { > > + case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE : > > + if (mSmmBootPerformanceTable != NULL) { > > + mBootRecordSize = mSmmBootPerformanceTable->Header.Length > > - sizeof (SMM_BOOT_PERFORMANCE_TABLE); > > + } > > + SmmCommData->BootRecordSize = mBootRecordSize; > > + break; > > + > > + case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA : > > + Status = EFI_UNSUPPORTED; > > + break; > > + > > + case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA_BY_OFFSET : > > + BootRecordOffset = SmmCommData->BootRecordOffset; > > + BootRecordData = SmmCommData->BootRecordData; > > + BootRecordSize = SmmCommData->BootRecordSize; > > + if (BootRecordData == NULL || BootRecordOffset >= > > mBootRecordSize) { > > + Status = EFI_INVALID_PARAMETER; > > + break; > > + } > > + > > + // > > + // Sanity check > > + // > > + if (BootRecordSize > mBootRecordSize - BootRecordOffset) { > > + BootRecordSize = mBootRecordSize - BootRecordOffset; > > + } > > + SmmCommData->BootRecordSize = BootRecordSize; > > + if (!SmmIsBufferOutsideSmmValid ((UINTN)BootRecordData, > > BootRecordSize)) { > > + DEBUG ((DEBUG_ERROR, "FpdtSmiHandler: MM Data buffer in > > MMRAM or overflow!\n")); > > + Status = EFI_ACCESS_DENIED; > > + break; > > + } > > + BootRecordBuffer = ((UINT8 *) (mSmmBootPerformanceTable)) + > > sizeof (SMM_BOOT_PERFORMANCE_TABLE); > > + CopyMem ( > > + (UINT8*)BootRecordData, > > + BootRecordBuffer + BootRecordOffset, > > + BootRecordSize > > ); > > - // > > - // Set FPDT report state to TRUE. > > - // > > - mFpdtDataIsReported = TRUE; > > + mFpdtDataIsReported = TRUE; > > + break; > > + > > + default: > > + Status = EFI_UNSUPPORTED; > > } > > + > > + SmmCommData->ReturnStatus = Status; > > + > > return EFI_SUCCESS; > > } > > > > @@ -830,8 +906,8 @@ InitializeSmmCorePerformanceLib ( > > ) > > { > > EFI_HANDLE Handle; > > + EFI_HANDLE SmiHandle; > > EFI_STATUS Status; > > - VOID *SmmReadyToBootRegistration; > > PERFORMANCE_PROPERTY *PerformanceProperty; > > > > // > > @@ -851,11 +927,13 @@ InitializeSmmCorePerformanceLib ( > > ); > > ASSERT_EFI_ERROR (Status); > > > > - Status = gSmst->SmmRegisterProtocolNotify ( > > - &gEdkiiSmmReadyToBootProtocolGuid, > > - SmmReportFpdtRecordData, > > - &SmmReadyToBootRegistration > > - ); > > + // > > + // Register SMI handler. > > + // > > + SmiHandle = NULL; > > + Status = gSmst->SmiHandlerRegister (FpdtSmiHandler, > > &gEfiFirmwarePerformanceGuid, &SmiHandle); > > + ASSERT_EFI_ERROR (Status); > > + > > Status = EfiGetSystemConfigurationTable (&gPerformanceProtocolGuid, > > (VOID **) &PerformanceProperty); > > if (EFI_ERROR (Status)) { > > // > > diff --git > > > a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.inf > > > b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.inf > > index 6b013b8557..9eecc4b58c 100644 > > --- > > > a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.inf > > +++ > > > b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformance > Li > > b.inf > > @@ -8,7 +8,7 @@ > > # This library is mainly used by SMM Core to start performance > > logging > to > > ensure that > > # SMM Performance and PerformanceEx Protocol are installed at the > > very beginning of SMM phase. > > # > > -# Copyright (c) 2011 - 2018, Intel Corporation. All rights > > reserved.<BR> > > +# Copyright (c) 2011 - 2021, Intel Corporation. All rights > > +reserved.<BR> > > # SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -58,14 > > +58,13 @@ [LibraryClasses] > > > > [Protocols] > > gEfiSmmBase2ProtocolGuid ## CONSUMES > > - gEdkiiSmmReadyToBootProtocolGuid ## NOTIFY > > > > [Guids] > > ## PRODUCES ## SystemTable > > gPerformanceProtocolGuid > > - gEdkiiFpdtExtendedFirmwarePerformanceGuid ## > SOMETIMES_PRODUCES ## > > UNDEFINED # StatusCode Data > > gZeroGuid ## > > SOMETIMES_CONSUMES ## GUID > > gEdkiiSmmPerformanceMeasurementProtocolGuid ## > > PRODUCES ## UNDEFINED # Install protocol > > + gEfiFirmwarePerformanceGuid ## > > SOMETIMES_PRODUCES ## UNDEFINED # SmiHandlerRegister > > > > [Pcd] > > gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask > > ## CONSUMES > > diff --git a/MdeModulePkg/MdeModulePkg.dec > > b/MdeModulePkg/MdeModulePkg.dec index 133e04ee86..463e889e9a > 100644 > > --- a/MdeModulePkg/MdeModulePkg.dec > > +++ b/MdeModulePkg/MdeModulePkg.dec > > @@ -1879,9 +1879,9 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, > > PcdsDynamic, PcdsDynamicEx] > > > > > gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosEntryPointProvideMethod|0 > x3 > > |UINT32|0x00010069 > > > > ## This PCD specifies the additional pad size in FPDT Basic Boot > > Performance Table for > > - # the extension FPDT boot records received after ReadyToBoot and > > before ExitBootService. > > + # the extension FPDT boot records received after EndOfDxe and > > + before > > ExitBootService. > > # @Prompt Pad size for extension FPDT boot records. > > - > > > gEfiMdeModulePkgTokenSpaceGuid.PcdExtFpdtBootRecordPadSize|0x2000 > 0| > > UINT32|0x0001005F > > + > > > gEfiMdeModulePkgTokenSpaceGuid.PcdExtFpdtBootRecordPadSize|0x3000 > 0| > > UINT32|0x0001005F > > > > ## Indicates if ConIn device are connected on demand.<BR><BR> > > # TRUE - ConIn device are not connected during BDS and > > ReadKeyStroke/ReadKeyStrokeEx produced diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.c > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.c > > index 61a7704b37..a6a0cd9e7d 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.c > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.c > > @@ -5,7 +5,7 @@ > > for Firmware Basic Boot Performance Record and other boot > > performance records, > > and install FPDT to ACPI table. > > > > - Copyright (c) 2011 - 2019, Intel Corporation. All rights > > reserved.<BR> > > + Copyright (c) 2011 - 2021, Intel Corporation. All rights > > + reserved.<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -16,6 +16,7 @@ > > #include <Protocol/AcpiTable.h> > > #include <Protocol/LockBox.h> > > #include <Protocol/Variable.h> > > +#include <Protocol/VariablePolicy.h> > > > > #include <Guid/Acpi.h> > > #include <Guid/FirmwarePerformance.h> @@ -32,6 +33,8 @@ #include > > <Library/HobLib.h> #include <Library/LockBoxLib.h> #include > > <Library/UefiLib.h> > > +#include <Library/VariablePolicyHelperLib.h> > > +#include <Library/PerformanceLib.h> > > > > #define SMM_BOOT_RECORD_COMM_SIZE (OFFSET_OF > > (EFI_SMM_COMMUNICATE_HEADER, Data) + > > sizeof(SMM_BOOT_RECORD_COMMUNICATE)) > > > > @@ -278,11 +281,12 @@ InstallFirmwarePerformanceDataTable ( > > VOID > > ) > > { > > - EFI_STATUS Status; > > - EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; > > - UINTN BootPerformanceDataSize; > > - FIRMWARE_PERFORMANCE_VARIABLE PerformanceVariable; > > - UINTN Size; > > + EFI_STATUS Status; > > + EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; > > + UINTN BootPerformanceDataSize; > > + FIRMWARE_PERFORMANCE_VARIABLE PerformanceVariable; > > + UINTN Size; > > + EDKII_VARIABLE_POLICY_PROTOCOL *VariablePolicyProtocol; > > > > // > > // Get AcpiTable Protocol. > > @@ -292,6 +296,14 @@ InstallFirmwarePerformanceDataTable ( > > return Status; > > } > > > > + // > > + // Get VariablePolicy Protocol. > > + // > > + Status = gBS->LocateProtocol(&gEdkiiVariablePolicyProtocolGuid, > > + NULL, > > (VOID **)&VariablePolicyProtocol); > > + if (EFI_ERROR (Status)) { > > + return Status; > > + } > > + > > if (mReceivedAcpiBootPerformanceTable != NULL) { > > mAcpiBootPerformanceTable = mReceivedAcpiBootPerformanceTable; > > mAcpiBootPerformanceTable->BasicBoot.ResetEnd = > > mBootPerformanceTableTemplate.BasicBoot.ResetEnd; > > @@ -369,6 +381,24 @@ InstallFirmwarePerformanceDataTable ( > > &PerformanceVariable > > ); > > > > + // > > + // Lock the variable which stores the Performance Table pointers. > > + // > > + Status = RegisterBasicVariablePolicy ( > > + VariablePolicyProtocol, > > + &gEfiFirmwarePerformanceGuid, > > + EFI_FIRMWARE_PERFORMANCE_VARIABLE_NAME, > > + VARIABLE_POLICY_NO_MIN_SIZE, > > + VARIABLE_POLICY_NO_MAX_SIZE, > > + VARIABLE_POLICY_NO_MUST_ATTR, > > + VARIABLE_POLICY_NO_CANT_ATTR, > > + VARIABLE_POLICY_TYPE_LOCK_NOW > > + ); > > + if (EFI_ERROR(Status)) { > > + DEBUG((EFI_D_ERROR, "[FirmwarePerformanceDxe] Error when lock > > variable %s, Status = %r\n", > > EFI_FIRMWARE_PERFORMANCE_VARIABLE_NAME, Status)); > > + ASSERT_EFI_ERROR(Status); > > + } > > + > > // > > // Publish Firmware Performance Data Table. > > // > > @@ -501,18 +531,12 @@ FpdtStatusCodeListenerDxe ( > > DEBUG ((EFI_D_INFO, "FPDT: Boot Performance - > > OsLoaderStartImageStart = %ld\n", > > mAcpiBootPerformanceTable->BasicBoot.OsLoaderStartImageStart)); > > DEBUG ((EFI_D_INFO, "FPDT: Boot Performance - > > ExitBootServicesEntry = 0\n")); > > DEBUG ((EFI_D_INFO, "FPDT: Boot Performance - > > ExitBootServicesExit = 0\n")); > > - } else if (Value == (EFI_SOFTWARE_DXE_BS_DRIVER | > > EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)) { > > - if (mAcpiBootPerformanceTable == NULL) { > > - // > > - // ACPI Firmware Performance Data Table not installed yet, install > it > > now. > > - // > > - InstallFirmwarePerformanceDataTable (); > > - } > > } else if (Data != NULL && CompareGuid (&Data->Type, > > &gEdkiiFpdtExtendedFirmwarePerformanceGuid)) { > > // > > // Get the Boot performance table and then install it to ACPI table. > > // > > CopyMem (&mReceivedAcpiBootPerformanceTable, Data + 1, > > Data->Size); > > + InstallFirmwarePerformanceDataTable (); > > } else if (Data != NULL && CompareGuid (&Data->Type, > > &gEfiFirmwarePerformanceGuid)) { > > DEBUG ((DEBUG_ERROR, "FpdtStatusCodeListenerDxe: Performance > data > > reported through gEfiFirmwarePerformanceGuid will not be collected by > > FirmwarePerformanceDataTableDxe\n")); > > Status = EFI_UNSUPPORTED; > > @@ -526,6 +550,32 @@ FpdtStatusCodeListenerDxe ( > > return Status; > > } > > > > +/** > > + Notify function for event EndOfDxe. > > + > > + This is used to install ACPI Firmware Performance Data Table for > > + basic > > boot records. > > + > > + @param[in] Event The Event that is being processed. > > + @param[in] Context The Event Context. > > + > > +**/ > > +VOID > > +EFIAPI > > +FpdtEndOfDxeEventNotify ( > > + IN EFI_EVENT Event, > > + IN VOID *Context > > + ) > > +{ > > + // > > + // When performance is enabled, the FPDT will be installed when > > DxeCorePerformanceLib report the data to FimwarePerformanceDxe. > > + // This is used to install the FPDT for the basic boot recods when > > performance infrastructure is not enabled. > > + // > > + if ((PcdGet8(PcdPerformanceLibraryPropertyMask) & > > PERFORMANCE_LIBRARY_PROPERTY_MEASUREMENT_ENABLED) != 0) { > > + return; > > + } > > + ASSERT (mReceivedAcpiBootPerformanceTable == NULL); > > + InstallFirmwarePerformanceDataTable (); } > > > > /** > > Notify function for event EVT_SIGNAL_EXIT_BOOT_SERVICES. This is > > used to record @@ -596,6 +646,7 @@ FirmwarePerformanceDxeEntryPoint > ( > > FIRMWARE_SEC_PERFORMANCE *Performance; > > VOID *Registration; > > UINT64 OemTableId; > > + EFI_EVENT EndOfDxeEvent; > > > > CopyMem ( > > mFirmwarePerformanceTableTemplate.Header.OemId, > > @@ -620,6 +671,19 @@ FirmwarePerformanceDxeEntryPoint ( > > Status = mRscHandlerProtocol->Register (FpdtStatusCodeListenerDxe, > > TPL_HIGH_LEVEL); > > ASSERT_EFI_ERROR (Status); > > > > + // > > + // Register the notify function to install FPDT at EndOfDxe. > > + // > > + Status = gBS->CreateEventEx ( > > + EVT_NOTIFY_SIGNAL, > > + TPL_NOTIFY, > > + FpdtEndOfDxeEventNotify, > > + NULL, > > + &gEfiEndOfDxeEventGroupGuid, > > + &EndOfDxeEvent > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > // > > // Register the notify function to update FPDT on ExitBootServices > Event. > > // > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.inf > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.inf > > index 1debb0193e..0411a22e66 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.inf > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm > > warePerformanceDxe.inf > > @@ -5,7 +5,7 @@ > > # for Firmware Basic Boot Performance Record and other boot > > performance records, # and install FPDT to ACPI table. > > # > > -# Copyright (c) 2011 - 2018, Intel Corporation. All rights > > reserved.<BR> > > +# Copyright (c) 2011 - 2021, Intel Corporation. All rights > > +reserved.<BR> > > # SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -46,12 > > +46,14 @@ [LibraryClasses] > > HobLib > > LockBoxLib > > UefiLib > > + VariablePolicyHelperLib > > > > [Protocols] > > gEfiAcpiTableProtocolGuid ## CONSUMES > > gEfiRscHandlerProtocolGuid ## CONSUMES > > gEfiVariableArchProtocolGuid ## CONSUMES > > gEfiLockBoxProtocolGuid ## CONSUMES > > + gEdkiiVariablePolicyProtocolGuid ## CONSUMES > > > > [Guids] > > gEfiEventExitBootServicesGuid ## CONSUMES > > ## Event > > @@ -63,6 +65,7 @@ [Guids] > > gEfiFirmwarePerformanceGuid > > gEdkiiFpdtExtendedFirmwarePerformanceGuid ## > > SOMETIMES_CONSUMES ## UNDEFINED # StatusCode Data > > gFirmwarePerformanceS3PointerGuid ## PRODUCES ## > > UNDEFINED # SaveLockBox > > + gEfiEndOfDxeEventGroupGuid ## CONSUMES ## > > Event > > > > [Pcd] > > gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderLoad > > ## CONSUMES > > @@ -72,6 +75,7 @@ [Pcd] > > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision > > ## CONSUMES > > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## > > CONSUMES > > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## > > CONSUMES > > + gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## > > CONSUMES > > > > [FeaturePcd] > > > > > gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwarePerformanceDataTableS3S > u > > pport ## CONSUMES > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.c > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.c > > index ecadef8711..47db9a2fc0 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.c > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.c > > @@ -11,7 +11,7 @@ > > > > FpdtSmiHandler() will receive untrusted input and do basic validation. > > > > - Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -29,20 +29,12 @@ > > #include <Library/LockBoxLib.h> > > #include <Library/PcdLib.h> > > #include <Library/BaseMemoryLib.h> > > -#include <Library/MemoryAllocationLib.h> > > -#include <Library/SynchronizationLib.h> > > #include "FirmwarePerformanceCommon.h" > > > > -SMM_BOOT_PERFORMANCE_TABLE *mMmBootPerformanceTable = > > NULL; > > > > EFI_MM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; > > UINT64 mSuspendStartTime = 0; > > BOOLEAN mS3SuspendLockBoxSaved = FALSE; > > -UINT32 mBootRecordSize = 0; > > -UINT8 *mBootRecordBuffer = NULL; > > - > > -SPIN_LOCK mMmFpdtLock; > > -BOOLEAN mMmramIsOutOfResource = FALSE; > > > > /** > > Report status code listener for MM. This is used to record the > performance > > @@ -84,21 +76,6 @@ FpdtStatusCodeListenerMm ( > > return EFI_UNSUPPORTED; > > } > > > > - // > > - // Collect one or more Boot records in boot time > > - // > > - if (Data != NULL && CompareGuid (&Data->Type, > > &gEdkiiFpdtExtendedFirmwarePerformanceGuid)) { > > - AcquireSpinLock (&mMmFpdtLock); > > - // > > - // Get the boot performance data. > > - // > > - CopyMem (&mMmBootPerformanceTable, Data + 1, Data->Size); > > - mBootRecordBuffer = ((UINT8 *) (mMmBootPerformanceTable)) + > sizeof > > (SMM_BOOT_PERFORMANCE_TABLE); > > - > > - ReleaseSpinLock (&mMmFpdtLock); > > - return EFI_SUCCESS; > > - } > > - > > if (Data != NULL && CompareGuid (&Data->Type, > > &gEfiFirmwarePerformanceGuid)) { > > DEBUG ((DEBUG_ERROR, "FpdtStatusCodeListenerMm: Performance > > data reported through gEfiFirmwarePerformanceGuid will not be collected > by > > FirmwarePerformanceDataTableMm\n")); > > return EFI_UNSUPPORTED; > > @@ -153,118 +130,6 @@ FpdtStatusCodeListenerMm ( > > return EFI_SUCCESS; > > } > > > > -/** > > - Communication service SMI Handler entry. > > - > > - This SMI handler provides services for report MM boot records. > > - > > - Caution: This function may receive untrusted input. > > - Communicate buffer and buffer size are external input, so this function > will > > do basic validation. > > - > > - @param[in] DispatchHandle The unique handle assigned to this > > handler by SmiHandlerRegister(). > > - @param[in] RegisterContext Points to an optional handler context > > which was specified when the > > - handler was registered. > > - @param[in, out] CommBuffer A pointer to a collection of data in > > memory that will > > - be conveyed from a non-MM > > environment into an MM environment. > > - @param[in, out] CommBufferSize The size of the CommBuffer. > > - > > - @retval EFI_SUCCESS The interrupt was > > handled and quiesced. No other handlers > > - should still be > > called. > > - @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED The interrupt has > > been quiesced but other handlers should > > - still be called. > > - @retval EFI_WARN_INTERRUPT_SOURCE_PENDING The interrupt is > > still pending and other handlers should still > > - be called. > > - @retval EFI_INTERRUPT_PENDING The interrupt could > > not be quiesced. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -FpdtSmiHandler ( > > - IN EFI_HANDLE DispatchHandle, > > - IN CONST VOID *RegisterContext, > > - IN OUT VOID *CommBuffer, > > - IN OUT UINTN *CommBufferSize > > - ) > > -{ > > - EFI_STATUS Status; > > - SMM_BOOT_RECORD_COMMUNICATE *SmmCommData; > > - UINTN BootRecordOffset; > > - UINTN BootRecordSize; > > - VOID *BootRecordData; > > - UINTN TempCommBufferSize; > > - > > - // > > - // If input is invalid, stop processing this SMI > > - // > > - if (CommBuffer == NULL || CommBufferSize == NULL) { > > - return EFI_SUCCESS; > > - } > > - > > - TempCommBufferSize = *CommBufferSize; > > - > > - if(TempCommBufferSize < sizeof > (SMM_BOOT_RECORD_COMMUNICATE)) > > { > > - return EFI_SUCCESS; > > - } > > - > > - if (!IsBufferOutsideMmValid ((UINTN)CommBuffer, > TempCommBufferSize)) > > { > > - DEBUG ((DEBUG_ERROR, "FpdtSmiHandler: MM communication data > > buffer in MMRAM or overflow!\n")); > > - return EFI_SUCCESS; > > - } > > - > > - SmmCommData = > (SMM_BOOT_RECORD_COMMUNICATE*)CommBuffer; > > - > > - Status = EFI_SUCCESS; > > - > > - switch (SmmCommData->Function) { > > - case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE : > > - if (mMmBootPerformanceTable != NULL) { > > - mBootRecordSize = mMmBootPerformanceTable->Header.Length - > > sizeof (SMM_BOOT_PERFORMANCE_TABLE); > > - } > > - SmmCommData->BootRecordSize = mBootRecordSize; > > - break; > > - > > - case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA : > > - Status = EFI_UNSUPPORTED; > > - break; > > - > > - case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_DATA_BY_OFFSET : > > - BootRecordOffset = SmmCommData->BootRecordOffset; > > - BootRecordData = SmmCommData->BootRecordData; > > - BootRecordSize = SmmCommData->BootRecordSize; > > - if (BootRecordData == NULL || BootRecordOffset >= > > mBootRecordSize) { > > - Status = EFI_INVALID_PARAMETER; > > - break; > > - } > > - > > - // > > - // Sanity check > > - // > > - if (BootRecordSize > mBootRecordSize - BootRecordOffset) { > > - BootRecordSize = mBootRecordSize - BootRecordOffset; > > - } > > - SmmCommData->BootRecordSize = BootRecordSize; > > - if (!IsBufferOutsideMmValid ((UINTN)BootRecordData, > > BootRecordSize)) { > > - DEBUG ((DEBUG_ERROR, "FpdtSmiHandler: MM Data buffer in > > MMRAM or overflow!\n")); > > - Status = EFI_ACCESS_DENIED; > > - break; > > - } > > - > > - CopyMem ( > > - (UINT8*)BootRecordData, > > - mBootRecordBuffer + BootRecordOffset, > > - BootRecordSize > > - ); > > - break; > > - > > - default: > > - Status = EFI_UNSUPPORTED; > > - } > > - > > - SmmCommData->ReturnStatus = Status; > > - > > - return EFI_SUCCESS; > > -} > > - > > /** > > The module Entry Point of the Firmware Performance Data Table MM > > driver. > > > > @@ -278,12 +143,6 @@ FirmwarePerformanceCommonEntryPoint ( > > ) > > { > > EFI_STATUS Status; > > - EFI_HANDLE Handle; > > - > > - // > > - // Initialize spin lock > > - // > > - InitializeSpinLock (&mMmFpdtLock); > > > > // > > // Get MM Report Status Code Handler Protocol. > > @@ -301,12 +160,5 @@ FirmwarePerformanceCommonEntryPoint ( > > Status = mRscHandlerProtocol->Register (FpdtStatusCodeListenerMm); > > ASSERT_EFI_ERROR (Status); > > > > - // > > - // Register SMI handler. > > - // > > - Handle = NULL; > > - Status = gMmst->MmiHandlerRegister (FpdtSmiHandler, > > &gEfiFirmwarePerformanceGuid, &Handle); > > - ASSERT_EFI_ERROR (Status); > > - > > return Status; > > } > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.h > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.h > > index 0fbdac02de..0640c48db7 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.h > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceCommon.h > > @@ -11,7 +11,7 @@ > > > > FpdtSmiHandler() will receive untrusted input and do basic validation. > > > > - Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR> > > Copyright (c), Microsoft Corporation. > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -20,21 +20,6 @@ > > #ifndef _FW_PERF_COMMON_H_ > > #define _FW_PERF_COMMON_H_ > > > > -/** > > - This function is an abstraction layer for implementation specific Mm > buffer > > validation routine. > > - > > - @param Buffer The buffer start address to be checked. > > - @param Length The buffer length to be checked. > > - > > - @retval TRUE This buffer is valid per processor architecture and not > > overlap with SMRAM. > > - @retval FALSE This buffer is not valid per processor architecture or > overlap > > with SMRAM. > > -**/ > > -BOOLEAN > > -IsBufferOutsideMmValid ( > > - IN EFI_PHYSICAL_ADDRESS Buffer, > > - IN UINT64 Length > > - ); > > - > > /** > > The module Entry Point of the Firmware Performance Data Table MM > > driver. > > > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceSmm.inf > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceSmm.inf > > index b7194bd899..a4da0ba8b2 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceSmm.inf > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceSmm.inf > > @@ -4,7 +4,7 @@ > > # This module registers report status code listener to collect > performance > > data > > # for SMM boot performance records and S3 Suspend Performance > Record. > > # > > -# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR> > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > ## > > @@ -52,10 +52,8 @@ [Protocols] > > > > [Guids] > > ## SOMETIMES_PRODUCES ## UNDEFINED # SaveLockBox > > - ## PRODUCES ## UNDEFINED # SmiHandlerRegister > > ## SOMETIMES_CONSUMES ## UNDEFINED # StatusCode Data > > gEfiFirmwarePerformanceGuid > > - gEdkiiFpdtExtendedFirmwarePerformanceGuid ## > > SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data > > > > [Pcd] > > gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeS3SuspendStart > ## > > CONSUMES > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.c > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.c > > index d7da61c98c..be52d8ce90 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.c > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.c > > @@ -11,7 +11,7 @@ > > > > FpdtSmiHandler() will receive untrusted input and do basic validation. > > > > - Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR> > > Copyright (c), Microsoft Corporation. > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -19,27 +19,8 @@ > > > > #include <PiMm.h> > > > > -#include <Library/StandaloneMmMemLib.h> > > #include "FirmwarePerformanceCommon.h" > > > > -/** > > - This function is an abstraction layer for implementation specific Mm > buffer > > validation routine. > > - > > - @param Buffer The buffer start address to be checked. > > - @param Length The buffer length to be checked. > > - > > - @retval TRUE This buffer is valid per processor architecture and not > > overlap with SMRAM. > > - @retval FALSE This buffer is not valid per processor architecture or > overlap > > with SMRAM. > > -**/ > > -BOOLEAN > > -IsBufferOutsideMmValid ( > > - IN EFI_PHYSICAL_ADDRESS Buffer, > > - IN UINT64 Length > > - ) > > -{ > > - return MmIsBufferOutsideMmValid (Buffer, Length); > > -} > > - > > /** > > The module Entry Point of the Firmware Performance Data Table MM > > driver. > > > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.inf > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.inf > > index e6aad88be0..fabe30b071 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.inf > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceStandaloneMm.inf > > @@ -4,7 +4,7 @@ > > # This module registers report status code listener to collect > performance > > data > > # for SMM boot performance records and S3 Suspend Performance > Record. > > # > > -# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR> > > # Copyright (c) Microsoft Corporation. > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -53,10 +53,8 @@ [Protocols] > > > > [Guids] > > ## SOMETIMES_PRODUCES ## UNDEFINED # SaveLockBox > > - ## PRODUCES ## UNDEFINED # SmiHandlerRegister > > ## SOMETIMES_CONSUMES ## UNDEFINED # StatusCode Data > > gEfiFirmwarePerformanceGuid > > - gEdkiiFpdtExtendedFirmwarePerformanceGuid ## > > SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data > > > > [Pcd] > > gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeS3SuspendStart > ## > > CONSUMES > > diff --git > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceTraditional.c > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceTraditional.c > > index 43c050d6b5..5bd38b0ef3 100644 > > --- > > > a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceTraditional.c > > +++ > > > b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/Fir > m > > warePerformanceTraditional.c > > @@ -11,7 +11,7 @@ > > > > FpdtSmiHandler() will receive untrusted input and do basic validation. > > > > - Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2011 - 2021, Intel Corporation. All rights reserved.<BR> > > Copyright (c), Microsoft Corporation. > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -19,27 +19,8 @@ > > > > #include <PiSmm.h> > > > > -#include <Library/SmmMemLib.h> > > #include "FirmwarePerformanceCommon.h" > > > > -/** > > - This function is an abstraction layer for implementation specific Mm > buffer > > validation routine. > > - > > - @param Buffer The buffer start address to be checked. > > - @param Length The buffer length to be checked. > > - > > - @retval TRUE This buffer is valid per processor architecture and not > > overlap with SMRAM. > > - @retval FALSE This buffer is not valid per processor architecture or > overlap > > with SMRAM. > > -**/ > > -BOOLEAN > > -IsBufferOutsideMmValid ( > > - IN EFI_PHYSICAL_ADDRESS Buffer, > > - IN UINT64 Length > > - ) > > -{ > > - return SmmIsBufferOutsideSmmValid (Buffer, Length); > > -} > > - > > /** > > The module Entry Point of the Firmware Performance Data Table MM > > driver. > > > > -- > > 2.18.0.windows.1 > > > > > > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#83684): https://edk2.groups.io/g/devel/message/83684 Mute This Topic: https://groups.io/mt/87000691/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
