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

Reply via email to