Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to
fix this issue.
Signed-off-by: Ming Huang <huangm...@linux.alibaba.com>
---
StandaloneMmPkg/Core/StandaloneMmCore.c | 17 ++++++++++++++++-
StandaloneMmPkg/Core/StandaloneMmCore.inf | 3 +++
StandaloneMmPkg/StandaloneMmPkg.dec | 2 ++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c
b/StandaloneMmPkg/Core/StandaloneMmCore.c
index d221f1d111..1cf259d946 100644
--- a/StandaloneMmPkg/Core/StandaloneMmCore.c
+++ b/StandaloneMmPkg/Core/StandaloneMmCore.c
@@ -512,6 +512,9 @@ StandaloneMmMain (
EFI_MMRAM_DESCRIPTOR *MmramRanges;
UINTN MmramRangeCount;
EFI_HOB_FIRMWARE_VOLUME *BfvHob;
+ EFI_HOB_HANDOFF_INFO_TABLE *HandOffHobNew;
+ EFI_HOB_HANDOFF_INFO_TABLE *HandOffHobOrg;
+ UINT64 MaxHobSize = PcdGet64
(PcdMemoryHobSize);
ProcessLibraryConstructorList (HobStart, &gMmCoreMmst);
@@ -619,10 +622,22 @@ StandaloneMmMain (
//
HobSize = GetHobListSize (HobStart);
DEBUG ((DEBUG_INFO, "HobSize - 0x%x\n", HobSize));
- MmHobStart = AllocatePool (HobSize);
+ ASSERT (HobSize <= MaxHobSize);
+ MmHobStart = AllocatePool (MaxHobSize);
DEBUG ((DEBUG_INFO, "MmHobStart - 0x%x\n", MmHobStart));
ASSERT (MmHobStart != NULL);
CopyMem (MmHobStart, HobStart, HobSize);
+ //
+ // Initlialize the new HOB table
+ //
+ HandOffHobOrg = (EFI_HOB_HANDOFF_INFO_TABLE *)HobStart;
+ HandOffHobNew = (EFI_HOB_HANDOFF_INFO_TABLE *)MmHobStart;
+ HandOffHobNew->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS)MmHobStart +
+ (HandOffHobOrg->EfiEndOfHobList -
(EFI_PHYSICAL_ADDRESS)HobStart);
+ HandOffHobNew->EfiFreeMemoryBottom =
HandOffHobNew->EfiEndOfHobList +
+ sizeof
(EFI_HOB_GENERIC_HEADER);
+ HandOffHobNew->EfiFreeMemoryTop =
(EFI_PHYSICAL_ADDRESS)MmHobStart + MaxHobSize;
+
Status = MmInstallConfigurationTable (&gMmCoreMmst,
&gEfiHobListGuid, MmHobStart, HobSize);
ASSERT_EFI_ERROR (Status);
diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.inf
b/StandaloneMmPkg/Core/StandaloneMmCore.inf
index c44b9ff333..37e6135d73 100644
--- a/StandaloneMmPkg/Core/StandaloneMmCore.inf
+++ b/StandaloneMmPkg/Core/StandaloneMmCore.inf
@@ -76,6 +76,9 @@
gEfiEventExitBootServicesGuid
gEfiEventReadyToBootGuid
+[FixedPcd]
+ gStandaloneMmPkgTokenSpaceGuid.PcdMemoryHobSize
+
#
# This configuration fails for CLANGPDB, which does not support
PIE in the GCC
# sense. Such however is required for ARM family StandaloneMmCore
diff --git a/StandaloneMmPkg/StandaloneMmPkg.dec
b/StandaloneMmPkg/StandaloneMmPkg.dec
index 46784d94e4..cf554676e2 100644
--- a/StandaloneMmPkg/StandaloneMmPkg.dec
+++ b/StandaloneMmPkg/StandaloneMmPkg.dec
@@ -48,3 +48,5 @@
gEfiStandaloneMmNonSecureBufferGuid = { 0xf00497e3,
0xbfa2, 0x41a1, { 0x9d, 0x29, 0x54, 0xc2, 0xe9, 0x37, 0x21, 0xc5 }}
gEfiArmTfCpuDriverEpDescriptorGuid = { 0x6ecbd5a1,
0xc0f8, 0x4702, { 0x83, 0x01, 0x4f, 0xc2, 0xc5, 0x47, 0x0a, 0x51 }}
+[PcdsFixedAtBuild]
+
gStandaloneMmPkgTokenSpaceGuid.PcdMemoryHobSize|0x00000000|UINT64|0x00000004
--
2.17.1