Reviewed-by: Liming Gao <[email protected]>
>-----Original Message----- >From: edk2-devel [mailto:[email protected]] On Behalf Of >Dandan Bi >Sent: Monday, July 02, 2018 1:30 PM >To: [email protected] >Cc: Zeng, Star <[email protected]>; Gao, Liming <[email protected]> >Subject: [edk2] [patch] MdeModulePkg/SmmCorePerformanceLib: Update >mPerformanceLength > >In mSmmBootPerformanceTable there are two parts, >one is the FPDT table header and the other is FPDT records. >Currently: >mPerformanceLength: The length of existing FPDT records. >mMaxPerformanceLength: The maximum length allocated for >mSmmBootPerformanceTable(including FPDT table header length >and existing FPDT records length) >But when compare mPerformanceLength with mMaxPerformanceLength >to check whether need to allocate new buffer for new FPDT >record, we miss to add mPerformanceLength with header length, >which will cause pool allocation behavior is not correct. > >Now update the mPerformanceLength to fix this issue: >updated mPerformanceLength = FPDT table header length >+ existing FPDT records length. > >Cc: Liming Gao <[email protected]> >Cc: Star Zeng <[email protected]> >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Dandan Bi <[email protected]> >--- > .../Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c | 8 >++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > >diff --git >a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceL >ib.c >b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceL >ib.c >index f18c3fb60d..e03d41ed37 100644 >--- >a/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceL >ib.c >+++ >b/MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceL >ib.c >@@ -43,11 +43,11 @@ typedef struct { > } HANDLE_GUID_MAP; > > HANDLE_GUID_MAP >mCacheHandleGuidTable[CACHE_HANDLE_GUID_COUNT]; > UINTN mCachePairCount = 0; > >-UINT32 mPerformanceLength = 0; >+UINT32 mPerformanceLength = sizeof >(SMM_BOOT_PERFORMANCE_TABLE); > UINT32 mMaxPerformanceLength = 0; > UINT32 mLoadImageCount = 0; > BOOLEAN mFpdtDataIsReported = FALSE; > BOOLEAN mLackSpaceIsReport = FALSE; > CHAR8 *mPlatformLanguage = NULL; >@@ -98,19 +98,19 @@ GetFpdtRecordPtr ( > // Check if pre-allocated buffer is full > // > if (mPerformanceLength + RecordSize > mMaxPerformanceLength) { > mSmmBootPerformanceTable = ReallocatePool ( > mPerformanceLength, >- mPerformanceLength + sizeof >(SMM_BOOT_PERFORMANCE_TABLE) + RecordSize + >FIRMWARE_RECORD_BUFFER, >+ mPerformanceLength + RecordSize + >FIRMWARE_RECORD_BUFFER, > mSmmBootPerformanceTable > ); > > if (mSmmBootPerformanceTable == NULL) { > return EFI_OUT_OF_RESOURCES; > } >- mSmmBootPerformanceTable->Header.Length = sizeof >(SMM_BOOT_PERFORMANCE_TABLE) + mPerformanceLength; >- mMaxPerformanceLength = mPerformanceLength + sizeof >(SMM_BOOT_PERFORMANCE_TABLE) + RecordSize + >FIRMWARE_RECORD_BUFFER; >+ mSmmBootPerformanceTable->Header.Length = mPerformanceLength; >+ mMaxPerformanceLength = mPerformanceLength + RecordSize + >FIRMWARE_RECORD_BUFFER; > } > // > // Covert buffer to FPDT Ptr Union type. > // > FpdtRecordPtr->RecordHeader = >(EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER >*)((UINT8*)mSmmBootPerformanceTable + mSmmBootPerformanceTable- >>Header.Length); >-- >2.14.3.windows.1 > >_______________________________________________ >edk2-devel mailing list >[email protected] >https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

