public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue
@ 2022-02-09 12:25 Ming Huang
  2022-02-09 12:25 ` [PATCH v1 1/2] StandaloneMmPkg/Hob: Assert or return NULL for create hob failed Ming Huang
                   ` (2 more replies)
  0 siblings, 3 replies; 22+ messages in thread
From: Ming Huang @ 2022-02-09 12:25 UTC (permalink / raw)
  To: devel, sami.mujawar, ardb+tianocore, jiewen.yao,
	supreeth.venkatesh
  Cc: ming.huang-, Ming Huang

Fix two issues in StandaloneMmPkg HOB.

Ming Huang (2):
  StandaloneMmPkg/Hob: Assert or return NULL for create hob failed
  StandaloneMmPkg: Fix HOB space and heap space conflicted issue

 StandaloneMmPkg/Core/StandaloneMmCore.c         | 17 ++++++++++++++++-
 StandaloneMmPkg/Core/StandaloneMmCore.inf       |  3 +++
 .../Arm/StandaloneMmCoreHobLib.c                |  6 ++++++
 .../StandaloneMmHobLib/StandaloneMmHobLib.c     |  3 +++
 StandaloneMmPkg/StandaloneMmPkg.dec             |  2 ++
 5 files changed, 30 insertions(+), 1 deletion(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

* [PATCH v1 1/2] StandaloneMmPkg/Hob: Assert or return NULL for create hob failed
  2022-02-09 12:25 [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang
@ 2022-02-09 12:25 ` Ming Huang
  2022-02-09 12:25 ` [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue Ming Huang
  2022-03-30  9:35 ` [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang
  2 siblings, 0 replies; 22+ messages in thread
From: Ming Huang @ 2022-02-09 12:25 UTC (permalink / raw)
  To: devel, sami.mujawar, ardb+tianocore, jiewen.yao,
	supreeth.venkatesh
  Cc: ming.huang-, Ming Huang

The rare case (create hob failed) should be considered. Assert for
StandaloneMmCoreHobLib and return NULL for StandaloneMmobLib.

Signed-off-by: Ming Huang <huangming@linux.alibaba.com>
---
 StandaloneMmPkg/Library/StandaloneMmCoreHobLib/Arm/StandaloneMmCoreHobLib.c | 6 ++++++
 StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c             | 3 +++
 2 files changed, 9 insertions(+)

diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/Arm/StandaloneMmCoreHobLib.c b/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/Arm/StandaloneMmCoreHobLib.c
index 1550e1babc..d27e5ceaa4 100644
--- a/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/Arm/StandaloneMmCoreHobLib.c
+++ b/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/Arm/StandaloneMmCoreHobLib.c
@@ -89,6 +89,7 @@ BuildModuleHob (
     );
 
   Hob = CreateHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE));
+  ASSERT (Hob != NULL);
 
   CopyGuid (&(Hob->MemoryAllocationHeader.Name), &gEfiHobMemoryAllocModuleGuid);
   Hob->MemoryAllocationHeader.MemoryBaseAddress = MemoryAllocationModule;
@@ -167,6 +168,7 @@ BuildGuidHob (
   ASSERT (DataLength <= (0xffff - sizeof (EFI_HOB_GUID_TYPE)));
 
   Hob = CreateHob (EFI_HOB_TYPE_GUID_EXTENSION, (UINT16)(sizeof (EFI_HOB_GUID_TYPE) + DataLength));
+  ASSERT (Hob != NULL);
   CopyGuid (&Hob->Name, Guid);
   return Hob + 1;
 }
@@ -226,6 +228,7 @@ BuildFvHob (
   EFI_HOB_FIRMWARE_VOLUME  *Hob;
 
   Hob = CreateHob (EFI_HOB_TYPE_FV, sizeof (EFI_HOB_FIRMWARE_VOLUME));
+  ASSERT (Hob != NULL);
 
   Hob->BaseAddress = BaseAddress;
   Hob->Length      = Length;
@@ -255,6 +258,7 @@ BuildFv2Hob (
   EFI_HOB_FIRMWARE_VOLUME2  *Hob;
 
   Hob = CreateHob (EFI_HOB_TYPE_FV2, sizeof (EFI_HOB_FIRMWARE_VOLUME2));
+  ASSERT (Hob != NULL);
 
   Hob->BaseAddress = BaseAddress;
   Hob->Length      = Length;
@@ -282,6 +286,7 @@ BuildCpuHob (
   EFI_HOB_CPU  *Hob;
 
   Hob = CreateHob (EFI_HOB_TYPE_CPU, sizeof (EFI_HOB_CPU));
+  ASSERT (Hob != NULL);
 
   Hob->SizeOfMemorySpace = SizeOfMemorySpace;
   Hob->SizeOfIoSpace     = SizeOfIoSpace;
@@ -319,6 +324,7 @@ BuildMemoryAllocationHob (
     );
 
   Hob = CreateHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION));
+  ASSERT (Hob != NULL);
 
   ZeroMem (&(Hob->AllocDescriptor.Name), sizeof (EFI_GUID));
   Hob->AllocDescriptor.MemoryBaseAddress = BaseAddress;
diff --git a/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c b/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c
index ee61bdd227..4acd44ceb3 100644
--- a/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c
+++ b/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c
@@ -396,6 +396,9 @@ BuildGuidHob (
   ASSERT (DataLength <= (0xffff - sizeof (EFI_HOB_GUID_TYPE)));
 
   Hob = CreateHob (EFI_HOB_TYPE_GUID_EXTENSION, (UINT16)(sizeof (EFI_HOB_GUID_TYPE) + DataLength));
+  if (Hob == NULL) {
+    return NULL;
+  }
   CopyGuid (&Hob->Name, Guid);
   return Hob + 1;
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2022-02-09 12:25 [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang
  2022-02-09 12:25 ` [PATCH v1 1/2] StandaloneMmPkg/Hob: Assert or return NULL for create hob failed Ming Huang
@ 2022-02-09 12:25 ` Ming Huang
  2022-05-03  9:10   ` Ard Biesheuvel
  2022-03-30  9:35 ` [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang
  2 siblings, 1 reply; 22+ messages in thread
From: Ming Huang @ 2022-02-09 12:25 UTC (permalink / raw)
  To: devel, sami.mujawar, ardb+tianocore, jiewen.yao,
	supreeth.venkatesh
  Cc: ming.huang-, Ming Huang

The heap space will be rewrote if a StandloneMmPkg module create HOB
by BuildGuidHob() interface and write data to HOB space.
Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to
fix this issue.

Signed-off-by: Ming Huang <huangming@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


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue
  2022-02-09 12:25 [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang
  2022-02-09 12:25 ` [PATCH v1 1/2] StandaloneMmPkg/Hob: Assert or return NULL for create hob failed Ming Huang
  2022-02-09 12:25 ` [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue Ming Huang
@ 2022-03-30  9:35 ` Ming Huang
  2 siblings, 0 replies; 22+ messages in thread
From: Ming Huang @ 2022-03-30  9:35 UTC (permalink / raw)
  To: devel, sami.mujawar, ardb+tianocore, jiewen.yao,
	supreeth.venkatesh
  Cc: ming.huang-

Hi,

Any comment about this series?

在 2/9/22 8:25 PM, Ming Huang 写道:
> Fix two issues in StandaloneMmPkg HOB.
> 
> Ming Huang (2):
>   StandaloneMmPkg/Hob: Assert or return NULL for create hob failed
>   StandaloneMmPkg: Fix HOB space and heap space conflicted issue
> 
>  StandaloneMmPkg/Core/StandaloneMmCore.c         | 17 ++++++++++++++++-
>  StandaloneMmPkg/Core/StandaloneMmCore.inf       |  3 +++
>  .../Arm/StandaloneMmCoreHobLib.c                |  6 ++++++
>  .../StandaloneMmHobLib/StandaloneMmHobLib.c     |  3 +++
>  StandaloneMmPkg/StandaloneMmPkg.dec             |  2 ++
>  5 files changed, 30 insertions(+), 1 deletion(-)
> 

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2022-02-09 12:25 ` [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue Ming Huang
@ 2022-05-03  9:10   ` Ard Biesheuvel
  2022-05-12 10:09     ` [edk2-devel] " Ming Huang
  0 siblings, 1 reply; 22+ messages in thread
From: Ard Biesheuvel @ 2022-05-03  9:10 UTC (permalink / raw)
  To: Ming Huang
  Cc: edk2-devel-groups-io, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

On Wed, 9 Feb 2022 at 13:26, Ming Huang <huangming@linux.alibaba.com> wrote:
>
> The heap space will be rewrote if a StandloneMmPkg module create HOB
> by BuildGuidHob() interface and write data to HOB space.

Can you elaborate? What is supposed to happen and why, and what is
happening instead?

> Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to
> fix this issue.
>
> Signed-off-by: Ming Huang <huangming@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
>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2022-05-03  9:10   ` Ard Biesheuvel
@ 2022-05-12 10:09     ` Ming Huang
  2023-08-16  8:55       ` Nhi Pham via groups.io
       [not found]       ` <177BD141FD103BE4.8497@groups.io>
  0 siblings, 2 replies; 22+ messages in thread
From: Ming Huang @ 2022-05-12 10:09 UTC (permalink / raw)
  To: devel, ardb
  Cc: Sami Mujawar, Ard Biesheuvel, Jiewen Yao, Supreeth Venkatesh,
	ming.huang-



在 5/3/22 5:10 PM, Ard Biesheuvel 写道:
> On Wed, 9 Feb 2022 at 13:26, Ming Huang <huangming@linux.alibaba.com> wrote:
>>
>> The heap space will be rewrote if a StandloneMmPkg module create HOB
>> by BuildGuidHob() interface and write data to HOB space.
> 
> Can you elaborate? What is supposed to happen and why, and what is
> happening instead?

I tried my best to explain the issue:

-----------------------------<--HandOffHob->EfiFreeMemoryTop
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
|          mMmMemoryMap     |
|---------------------------|<--HandOffHob->EfiFreeMemoryBottom
|          HobEnd           |
|---------------------------|<--HandOffHob->EfiEndOfHobList
|                           |
|          Hob #1           |
-----------------------------<--MmHobStart
1 The mMmMemoryMap which use for free page is on above the HobEnd.
2 Create a hob by BuildGuidHob(), the HobEnd will move up and cover
  the structure or list using by free page.

After this patch, there is a pre-allocation space for creating hob.

-----------------------------<--HandOffHob->EfiFreeMemoryTop
|                           |
|                           |
|                           |
|                           |
|         mMmMemoryMap      |
|---------------------------|<--HandOffHob->EfiFreeMemoryBottom
|          Hob free space   | by PcdMemoryHobSize
|---------------------------|
|          HobEnd           |
|---------------------------|<--HandOffHob->EfiEndOfHobList
|                           |
|          Hob #1           |
-----------------------------<--MmHobStart

> 
>> Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to
>> fix this issue.
>>
>> Signed-off-by: Ming Huang <huangming@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
>>
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2022-05-12 10:09     ` [edk2-devel] " Ming Huang
@ 2023-08-16  8:55       ` Nhi Pham via groups.io
  2023-08-30 13:10         ` Ard Biesheuvel
       [not found]       ` <177BD141FD103BE4.8497@groups.io>
  1 sibling, 1 reply; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-08-16  8:55 UTC (permalink / raw)
  To: devel, huangming, ardb
  Cc: Sami Mujawar, Ard Biesheuvel, Jiewen Yao, Supreeth Venkatesh,
	ming.huang-

Hi Ard and Ming,

I have been seeing an issue with StandaloneMM HobLib that can be fixed 
by this patch as well.

The function CreateHob() in the HobLib instance 
StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf 
does not work at all. The HobList is early created by the 
StandaloneMmCoreEntryPoint then it is relocated on the heap memory by 
StandaloneMmCore. But the FreeMemoryTop and FreeMemoryBottom are not 
updated accordingly and the HOB free memory top is overlapped with the 
heap space. This causes the CreateHob() function to not work as 
expected. Introducing the PcdMemoryHobSize is reasonable to fix this issue.

I tested this patch in my end.

Tested-by: Nhi Pham <nhi@os.amperecomputing.com>

Thanks,

-Nhi

On 5/12/2022 5:09 PM, Ming Huang via groups.io wrote:
>
> 在 5/3/22 5:10 PM, Ard Biesheuvel 写道:
>> On Wed, 9 Feb 2022 at 13:26, Ming Huang <huangming@linux.alibaba.com> wrote:
>>> The heap space will be rewrote if a StandloneMmPkg module create HOB
>>> by BuildGuidHob() interface and write data to HOB space.
>> Can you elaborate? What is supposed to happen and why, and what is
>> happening instead?
> I tried my best to explain the issue:
>
> -----------------------------<--HandOffHob->EfiFreeMemoryTop
> |                           |
> |                           |
> |                           |
> |                           |
> |                           |
> |                           |
> |          mMmMemoryMap     |
> |---------------------------|<--HandOffHob->EfiFreeMemoryBottom
> |          HobEnd           |
> |---------------------------|<--HandOffHob->EfiEndOfHobList
> |                           |
> |          Hob #1           |
> -----------------------------<--MmHobStart
> 1 The mMmMemoryMap which use for free page is on above the HobEnd.
> 2 Create a hob by BuildGuidHob(), the HobEnd will move up and cover
>    the structure or list using by free page.
>
> After this patch, there is a pre-allocation space for creating hob.
>
> -----------------------------<--HandOffHob->EfiFreeMemoryTop
> |                           |
> |                           |
> |                           |
> |                           |
> |         mMmMemoryMap      |
> |---------------------------|<--HandOffHob->EfiFreeMemoryBottom
> |          Hob free space   | by PcdMemoryHobSize
> |---------------------------|
> |          HobEnd           |
> |---------------------------|<--HandOffHob->EfiEndOfHobList
> |                           |
> |          Hob #1           |
> -----------------------------<--MmHobStart
>
>>> Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to
>>> fix this issue.
>>>
>>> Signed-off-by: Ming Huang <huangming@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
>>>
>>
>>
>>
>
> 
>
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#107793): https://edk2.groups.io/g/devel/message/107793
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
       [not found]       ` <177BD141FD103BE4.8497@groups.io>
@ 2023-08-29  2:48         ` Nhi Pham via groups.io
  0 siblings, 0 replies; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-08-29  2:48 UTC (permalink / raw)
  To: devel, nhi, huangming, ming.huang-, ardb, Ard Biesheuvel,
	Sami Mujawar
  Cc: Jiewen Yao, Supreeth Venkatesh

Just a gentle ping!

Hi Ard, can you provide your feedback on this patch?

Thanks,

-Nhi

On 8/16/2023 3:55 PM, Nhi Pham via groups.io wrote:
> Hi Ard and Ming,
>
> I have been seeing an issue with StandaloneMM HobLib that can be fixed 
> by this patch as well.
>
> The function CreateHob() in the HobLib instance 
> StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf 
> does not work at all. The HobList is early created by the 
> StandaloneMmCoreEntryPoint then it is relocated on the heap memory by 
> StandaloneMmCore. But the FreeMemoryTop and FreeMemoryBottom are not 
> updated accordingly and the HOB free memory top is overlapped with the 
> heap space. This causes the CreateHob() function to not work as 
> expected. Introducing the PcdMemoryHobSize is reasonable to fix this 
> issue.
>
> I tested this patch in my end.
>
> Tested-by: Nhi Pham <nhi@os.amperecomputing.com>
>
> Thanks,
>
> -Nhi
>
> On 5/12/2022 5:09 PM, Ming Huang via groups.io wrote:
>>
>> 在 5/3/22 5:10 PM, Ard Biesheuvel 写道:
>>> On Wed, 9 Feb 2022 at 13:26, Ming Huang 
>>> <huangming@linux.alibaba.com> wrote:
>>>> The heap space will be rewrote if a StandloneMmPkg module create HOB
>>>> by BuildGuidHob() interface and write data to HOB space.
>>> Can you elaborate? What is supposed to happen and why, and what is
>>> happening instead?
>> I tried my best to explain the issue:
>>
>> -----------------------------<--HandOffHob->EfiFreeMemoryTop
>> |                           |
>> |                           |
>> |                           |
>> |                           |
>> |                           |
>> |                           |
>> |          mMmMemoryMap     |
>> |---------------------------|<--HandOffHob->EfiFreeMemoryBottom
>> |          HobEnd           |
>> |---------------------------|<--HandOffHob->EfiEndOfHobList
>> |                           |
>> |          Hob #1           |
>> -----------------------------<--MmHobStart
>> 1 The mMmMemoryMap which use for free page is on above the HobEnd.
>> 2 Create a hob by BuildGuidHob(), the HobEnd will move up and cover
>>    the structure or list using by free page.
>>
>> After this patch, there is a pre-allocation space for creating hob.
>>
>> -----------------------------<--HandOffHob->EfiFreeMemoryTop
>> |                           |
>> |                           |
>> |                           |
>> |                           |
>> |         mMmMemoryMap      |
>> |---------------------------|<--HandOffHob->EfiFreeMemoryBottom
>> |          Hob free space   | by PcdMemoryHobSize
>> |---------------------------|
>> |          HobEnd           |
>> |---------------------------|<--HandOffHob->EfiEndOfHobList
>> |                           |
>> |          Hob #1           |
>> -----------------------------<--MmHobStart
>>
>>>> Add a PCD PcdMemoryHobSize for pre-allocation a space to create HOB to
>>>> fix this issue.
>>>>
>>>> Signed-off-by: Ming Huang <huangming@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
>>>>
>>>
>>>
>>>
>>
>>
>>
>>
>
>
> 
>
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108075): https://edk2.groups.io/g/devel/message/108075
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-08-16  8:55       ` Nhi Pham via groups.io
@ 2023-08-30 13:10         ` Ard Biesheuvel
  2023-08-31  8:20           ` Nhi Pham via groups.io
  0 siblings, 1 reply; 22+ messages in thread
From: Ard Biesheuvel @ 2023-08-30 13:10 UTC (permalink / raw)
  To: Nhi Pham
  Cc: devel, huangming, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

On Wed, 16 Aug 2023 at 10:56, Nhi Pham <nhi@amperemail.onmicrosoft.com> wrote:
>
> Hi Ard and Ming,
>
> I have been seeing an issue with StandaloneMM HobLib that can be fixed
> by this patch as well.
>
> The function CreateHob() in the HobLib instance
> StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf
> does not work at all. The HobList is early created by the
> StandaloneMmCoreEntryPoint then it is relocated on the heap memory by
> StandaloneMmCore. But the FreeMemoryTop and FreeMemoryBottom are not
> updated accordingly and the HOB free memory top is overlapped with the
> heap space. This causes the CreateHob() function to not work as
> expected. Introducing the PcdMemoryHobSize is reasonable to fix this issue.
>
> I tested this patch in my end.
>
> Tested-by: Nhi Pham <nhi@os.amperecomputing.com>
>

Thanks for reminding me.

So if the HOB creation is completely broken, are we sure this is the
correct fix? Wouldn't it be better to update FreeMemoryTop and
FreeMemoryBottom to the correct values?


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108145): https://edk2.groups.io/g/devel/message/108145
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-08-30 13:10         ` Ard Biesheuvel
@ 2023-08-31  8:20           ` Nhi Pham via groups.io
  2023-09-01 20:43             ` Oliver Smith-Denny
  0 siblings, 1 reply; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-08-31  8:20 UTC (permalink / raw)
  To: Ard Biesheuvel
  Cc: devel, huangming, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

Hi Ard,

Thanks for your response on this patch. Please see my reply inline...

On 8/30/2023 8:10 PM, Ard Biesheuvel wrote:
> [EXTERNAL EMAIL NOTICE: This email originated from an external sender. Please be mindful of safe email handling and proprietary information protection practices.]
>
>
> On Wed, 16 Aug 2023 at 10:56, Nhi Pham <nhi@amperemail.onmicrosoft.com> wrote:
>> Hi Ard and Ming,
>>
>> I have been seeing an issue with StandaloneMM HobLib that can be fixed
>> by this patch as well.
>>
>> The function CreateHob() in the HobLib instance
>> StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf
>> does not work at all. The HobList is early created by the
>> StandaloneMmCoreEntryPoint then it is relocated on the heap memory by
>> StandaloneMmCore. But the FreeMemoryTop and FreeMemoryBottom are not
>> updated accordingly and the HOB free memory top is overlapped with the
>> heap space. This causes the CreateHob() function to not work as
>> expected. Introducing the PcdMemoryHobSize is reasonable to fix this issue.
>>
>> I tested this patch in my end.
>>
>> Tested-by: Nhi Pham <nhi@os.amperecomputing.com>
>>
> Thanks for reminding me.
>
> So if the HOB creation is completely broken, are we sure this is the
> correct fix? Wouldn't it be better to update FreeMemoryTop and
> FreeMemoryBottom to the correct values?

Per your question, I had a deep dive into the HOB today. I think I need 
to clarify further the issue to make sure that we are on the same page.

1. When the base of the HOB list (HobStart) is reallocated in the MM 
heap memory, the Hob->EfiEndOfHobList must be adjusted accordingly 
compared to the new HOB base. Currently, we are missing that. That 
causes the CreateHob() function does not work. The GetNextHob() function 
always look up the old HOB list instead of the new HOB list.

2. The Memory Allocation StandaloneMmPkg/Core/Page.c does not update the 
Hob->EfiFreeMemoryTop, this may cause the MM heap space and HOB space to 
be overlapped at some points.

It sounds like the issue on the memory allocation in StandaloneMM. For 
#1, I think we should write a new patch for it. For #2, could you advise?

Thanks,

-Nhi



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108185): https://edk2.groups.io/g/devel/message/108185
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-08-31  8:20           ` Nhi Pham via groups.io
@ 2023-09-01 20:43             ` Oliver Smith-Denny
  2023-09-05  2:20               ` Nhi Pham via groups.io
  0 siblings, 1 reply; 22+ messages in thread
From: Oliver Smith-Denny @ 2023-09-01 20:43 UTC (permalink / raw)
  To: devel, nhi, Ard Biesheuvel
  Cc: huangming, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

On 8/31/2023 1:20 AM, Nhi Pham via groups.io wrote:
> Hi Ard,
> 
> Thanks for your response on this patch. Please see my reply inline...
> 
> On 8/30/2023 8:10 PM, Ard Biesheuvel wrote:
>> [EXTERNAL EMAIL NOTICE: This email originated from an external sender. 
>> Please be mindful of safe email handling and proprietary information 
>> protection practices.]
>>
>>
>> On Wed, 16 Aug 2023 at 10:56, Nhi Pham 
>> <nhi@amperemail.onmicrosoft.com> wrote:
>>> Hi Ard and Ming,
>>>
>>> I have been seeing an issue with StandaloneMM HobLib that can be fixed
>>> by this patch as well.
>>>
>>> The function CreateHob() in the HobLib instance
>>> StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf
>>> does not work at all. The HobList is early created by the
>>> StandaloneMmCoreEntryPoint then it is relocated on the heap memory by
>>> StandaloneMmCore. But the FreeMemoryTop and FreeMemoryBottom are not
>>> updated accordingly and the HOB free memory top is overlapped with the
>>> heap space. This causes the CreateHob() function to not work as
>>> expected. Introducing the PcdMemoryHobSize is reasonable to fix this 
>>> issue.
>>>
>>> I tested this patch in my end.
>>>
>>> Tested-by: Nhi Pham <nhi@os.amperecomputing.com>
>>>
>> Thanks for reminding me.
>>
>> So if the HOB creation is completely broken, are we sure this is the
>> correct fix? Wouldn't it be better to update FreeMemoryTop and
>> FreeMemoryBottom to the correct values?
> 
> Per your question, I had a deep dive into the HOB today. I think I need 
> to clarify further the issue to make sure that we are on the same page.
> 
> 1. When the base of the HOB list (HobStart) is reallocated in the MM 
> heap memory, the Hob->EfiEndOfHobList must be adjusted accordingly 
> compared to the new HOB base. Currently, we are missing that. That 
> causes the CreateHob() function does not work. The GetNextHob() function 
> always look up the old HOB list instead of the new HOB list.
> 
> 2. The Memory Allocation StandaloneMmPkg/Core/Page.c does not update the 
> Hob->EfiFreeMemoryTop, this may cause the MM heap space and HOB space to 
> be overlapped at some points.
> 
> It sounds like the issue on the memory allocation in StandaloneMM. For 
> #1, I think we should write a new patch for it. For #2, could you advise?
> 

If I am understanding this correctly, this is only an issue when
HOBs are created in StMM, i.e. not from HOBs that are passed in. Is this
correct?

If so, is HOB creation in StMM and supported use case? The only instance
a quick search turns up is the ARM StMM Core entry, where some
information from TF-A is converted to HOB format. Do we have any other
use cases (and curious more on this use case). My thought process would
be that StMM would not create any HOBs. Depending on FW configuration,
it may receive HOBs from PEI.

In PEI/DXE to StMM communication, we should be using the
MM_Communicate interface.

But in StMM to StMM communication, I would expect we would go through
interfaces like protocols, PCDs, or UEFI variables. Any reason for HOBs
that I'm not thinking of? I'm wondering if the answer here is to
address what seemingly is one (or a very small set) of use cases and
remove the HOB creation code in StMM altogether.

Thanks,
Oliver


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108232): https://edk2.groups.io/g/devel/message/108232
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-01 20:43             ` Oliver Smith-Denny
@ 2023-09-05  2:20               ` Nhi Pham via groups.io
  2023-09-05 21:29                 ` Oliver Smith-Denny
  0 siblings, 1 reply; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-09-05  2:20 UTC (permalink / raw)
  To: Oliver Smith-Denny, devel, nhi, Ard Biesheuvel
  Cc: huangming, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

Hi Oliver, thank you for taking a look at this patch.

On 9/2/2023 3:43 AM, Oliver Smith-Denny wrote:
> On 8/31/2023 1:20 AM, Nhi Pham via groups.io wrote:
>> Hi Ard,
>>
>> Thanks for your response on this patch. Please see my reply inline...
>>
>> On 8/30/2023 8:10 PM, Ard Biesheuvel wrote:
>>> [EXTERNAL EMAIL NOTICE: This email originated from an external 
>>> sender. Please be mindful of safe email handling and proprietary 
>>> information protection practices.]
>>>
>>>
>>> On Wed, 16 Aug 2023 at 10:56, Nhi Pham 
>>> <nhi@amperemail.onmicrosoft.com> wrote:
>>>> Hi Ard and Ming,
>>>>
>>>> I have been seeing an issue with StandaloneMM HobLib that can be fixed
>>>> by this patch as well.
>>>>
>>>> The function CreateHob() in the HobLib instance
>>>> StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf 
>>>>
>>>> does not work at all. The HobList is early created by the
>>>> StandaloneMmCoreEntryPoint then it is relocated on the heap memory by
>>>> StandaloneMmCore. But the FreeMemoryTop and FreeMemoryBottom are not
>>>> updated accordingly and the HOB free memory top is overlapped with the
>>>> heap space. This causes the CreateHob() function to not work as
>>>> expected. Introducing the PcdMemoryHobSize is reasonable to fix 
>>>> this issue.
>>>>
>>>> I tested this patch in my end.
>>>>
>>>> Tested-by: Nhi Pham <nhi@os.amperecomputing.com>
>>>>
>>> Thanks for reminding me.
>>>
>>> So if the HOB creation is completely broken, are we sure this is the
>>> correct fix? Wouldn't it be better to update FreeMemoryTop and
>>> FreeMemoryBottom to the correct values?
>>
>> Per your question, I had a deep dive into the HOB today. I think I 
>> need to clarify further the issue to make sure that we are on the 
>> same page.
>>
>> 1. When the base of the HOB list (HobStart) is reallocated in the MM 
>> heap memory, the Hob->EfiEndOfHobList must be adjusted accordingly 
>> compared to the new HOB base. Currently, we are missing that. That 
>> causes the CreateHob() function does not work. The GetNextHob() 
>> function always look up the old HOB list instead of the new HOB list.
>>
>> 2. The Memory Allocation StandaloneMmPkg/Core/Page.c does not update 
>> the Hob->EfiFreeMemoryTop, this may cause the MM heap space and HOB 
>> space to be overlapped at some points.
>>
>> It sounds like the issue on the memory allocation in StandaloneMM. 
>> For #1, I think we should write a new patch for it. For #2, could you 
>> advise?
>>
>
> If I am understanding this correctly, this is only an issue when
> HOBs are created in StMM, i.e. not from HOBs that are passed in. Is this
> correct?
Yes, the issue only occurs when HOB are created in StandaloneMM by the 
HOB library instance 
StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf
>
> If so, is HOB creation in StMM and supported use case? The only instance
I think it is intended to work as the CreateHob() function is implemented.
> a quick search turns up is the ARM StMM Core entry, where some
> information from TF-A is converted to HOB format. Do we have any other
> use cases (and curious more on this use case). My thought process would
> be that StMM would not create any HOBs. Depending on FW configuration,
> it may receive HOBs from PEI.

I have a use case when enabling the UEFI Variable driver running in 
StandaloneMM. Instead of using the PCDs, the in-memory NVRAM region is 
allocated **dynamically** at boot time in the StMM secure memory. Then, 
they will be passed into the gVariableFlashInfoHobGuid for being 
consumed by other variable MM drivers.

>
> In PEI/DXE to StMM communication, we should be using the
> MM_Communicate interface.
>
> But in StMM to StMM communication, I would expect we would go through
> interfaces like protocols, PCDs, or UEFI variables. Any reason for HOBs
> that I'm not thinking of? I'm wondering if the answer here is to
> address what seemingly is one (or a very small set) of use cases and
> remove the HOB creation code in StMM altogether.
>
> Thanks,
> Oliver


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108269): https://edk2.groups.io/g/devel/message/108269
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-05  2:20               ` Nhi Pham via groups.io
@ 2023-09-05 21:29                 ` Oliver Smith-Denny
  2023-09-06  6:33                   ` Ni, Ray
  2023-09-06  7:35                   ` Nhi Pham via groups.io
  0 siblings, 2 replies; 22+ messages in thread
From: Oliver Smith-Denny @ 2023-09-05 21:29 UTC (permalink / raw)
  To: Nhi Pham, devel, nhi, Ard Biesheuvel
  Cc: huangming, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

On 9/4/2023 7:20 PM, Nhi Pham wrote:
> On 9/2/2023 3:43 AM, Oliver Smith-Denny wrote:
>> On 8/31/2023 1:20 AM, Nhi Pham via groups.io wrote:
>>
>> If I am understanding this correctly, this is only an issue when
>> HOBs are created in StMM, i.e. not from HOBs that are passed in. Is this
>> correct?
> Yes, the issue only occurs when HOB are created in StandaloneMM by the 
> HOB library instance 
> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf
>>
>> If so, is HOB creation in StMM and supported use case? The only instance
> I think it is intended to work as the CreateHob() function is implemented.

Well, that may just be a copy/paste sort of thing :).

>> a quick search turns up is the ARM StMM Core entry, where some
>> information from TF-A is converted to HOB format. Do we have any other
>> use cases (and curious more on this use case). My thought process would
>> be that StMM would not create any HOBs. Depending on FW configuration,
>> it may receive HOBs from PEI.
> 
> I have a use case when enabling the UEFI Variable driver running in 
> StandaloneMM. Instead of using the PCDs, the in-memory NVRAM region is 
> allocated **dynamically** at boot time in the StMM secure memory. Then, 
> they will be passed into the gVariableFlashInfoHobGuid for being 
> consumed by other variable MM drivers.
> 

I do believe that per the PI spec, we should have HOB producer and HOB
consumer phases, where in this case PEI (if it was the launching entity
for StMM) is the HOB producer and StMM is the HOB producer. This is the
same pattern the PI spec details for PEI and DXE, where DXE is not
intended to create new HOBs, but just to consume information from the
previous phase.

As I mentioned, there are other interfaces for passing information
within a phase, such as protocols, dynamic PCDs, variables, etc. that
are built for this application. I think it is useful to adhere to the
model for HOBs (which are hand off blocks, one phase handing information
to another phase) and that we will create more issues if we rely on
HOB consumer phases producing HOBs.

My proposal would be to remove the HOB creation code from StMM
completely. I believe in your use case that you are describing a dynamic
PCD or a protocol could work to pass the information.

If we are saying that prior to your patch that HOB creation in StMM was
completely broken, anyway, it seems that folks were not relying on this
code?

Thanks,
Oliver


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108293): https://edk2.groups.io/g/devel/message/108293
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-05 21:29                 ` Oliver Smith-Denny
@ 2023-09-06  6:33                   ` Ni, Ray
  2023-09-06  6:56                     ` Ard Biesheuvel
  2023-09-06  7:55                     ` Nhi Pham via groups.io
  2023-09-06  7:35                   ` Nhi Pham via groups.io
  1 sibling, 2 replies; 22+ messages in thread
From: Ni, Ray @ 2023-09-06  6:33 UTC (permalink / raw)
  To: Nhi Pham, devel@edk2.groups.io, nhi@os.amperecomputing.com,
	Ard Biesheuvel, osde@linux.microsoft.com
  Cc: huangming@linux.alibaba.com, Sami Mujawar, Ard Biesheuvel,
	Yao, Jiewen, Supreeth Venkatesh, ming.huang-@outlook.com

[-- Attachment #1: Type: text/plain, Size: 3990 bytes --]

I am a bit confused.

The HOB list in standalone MM is read-only. Why could any module call BuildGuidHob() to modify the HOB.

I saw Oliver mentioned something about StMM. I don't know what that is. But it seems that's ARM specific. Then, I don't think it's proper to modify code here for a specific arch ARM.

Thanks,
Ray
________________________________
From: devel@edk2.groups.io <devel@edk2.groups.io> on behalf of Oliver Smith-Denny <osde@linux.microsoft.com>
Sent: Wednesday, September 6, 2023 5:29 AM
To: Nhi Pham <nhi@amperemail.onmicrosoft.com>; devel@edk2.groups.io <devel@edk2.groups.io>; nhi@os.amperecomputing.com <nhi@os.amperecomputing.com>; Ard Biesheuvel <ardb@kernel.org>
Cc: huangming@linux.alibaba.com <huangming@linux.alibaba.com>; Sami Mujawar <sami.mujawar@arm.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Yao, Jiewen <jiewen.yao@intel.com>; Supreeth Venkatesh <supreeth.venkatesh@arm.com>; ming.huang-@outlook.com <ming.huang-@outlook.com>
Subject: Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue

On 9/4/2023 7:20 PM, Nhi Pham wrote:
> On 9/2/2023 3:43 AM, Oliver Smith-Denny wrote:
>> On 8/31/2023 1:20 AM, Nhi Pham via groups.io wrote:
>>
>> If I am understanding this correctly, this is only an issue when
>> HOBs are created in StMM, i.e. not from HOBs that are passed in. Is this
>> correct?
> Yes, the issue only occurs when HOB are created in StandaloneMM by the
> HOB library instance
> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf
>>
>> If so, is HOB creation in StMM and supported use case? The only instance
> I think it is intended to work as the CreateHob() function is implemented.

Well, that may just be a copy/paste sort of thing :).

>> a quick search turns up is the ARM StMM Core entry, where some
>> information from TF-A is converted to HOB format. Do we have any other
>> use cases (and curious more on this use case). My thought process would
>> be that StMM would not create any HOBs. Depending on FW configuration,
>> it may receive HOBs from PEI.
>
> I have a use case when enabling the UEFI Variable driver running in
> StandaloneMM. Instead of using the PCDs, the in-memory NVRAM region is
> allocated **dynamically** at boot time in the StMM secure memory. Then,
> they will be passed into the gVariableFlashInfoHobGuid for being
> consumed by other variable MM drivers.
>

I do believe that per the PI spec, we should have HOB producer and HOB
consumer phases, where in this case PEI (if it was the launching entity
for StMM) is the HOB producer and StMM is the HOB producer. This is the
same pattern the PI spec details for PEI and DXE, where DXE is not
intended to create new HOBs, but just to consume information from the
previous phase.

As I mentioned, there are other interfaces for passing information
within a phase, such as protocols, dynamic PCDs, variables, etc. that
are built for this application. I think it is useful to adhere to the
model for HOBs (which are hand off blocks, one phase handing information
to another phase) and that we will create more issues if we rely on
HOB consumer phases producing HOBs.

My proposal would be to remove the HOB creation code from StMM
completely. I believe in your use case that you are describing a dynamic
PCD or a protocol could work to pass the information.

If we are saying that prior to your patch that HOB creation in StMM was
completely broken, anyway, it seems that folks were not relying on this
code?

Thanks,
Oliver







-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108306): https://edk2.groups.io/g/devel/message/108306
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: Type: text/html, Size: 6855 bytes --]

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-06  6:33                   ` Ni, Ray
@ 2023-09-06  6:56                     ` Ard Biesheuvel
  2023-09-06  7:55                     ` Nhi Pham via groups.io
  1 sibling, 0 replies; 22+ messages in thread
From: Ard Biesheuvel @ 2023-09-06  6:56 UTC (permalink / raw)
  To: Ni, Ray
  Cc: Nhi Pham, devel@edk2.groups.io, nhi@os.amperecomputing.com,
	osde@linux.microsoft.com, huangming@linux.alibaba.com,
	Sami Mujawar, Ard Biesheuvel, Yao, Jiewen, Supreeth Venkatesh,
	ming.huang-@outlook.com

On Wed, 6 Sept 2023 at 08:33, Ni, Ray <ray.ni@intel.com> wrote:
>
> I am a bit confused.
>
> The HOB list in standalone MM is read-only. Why could any module call BuildGuidHob() to modify the HOB.
>
> I saw Oliver mentioned something about StMM. I don't know what that is. But it seems that's ARM specific. Then, I don't think it's proper to modify code here for a specific arch ARM.
>

Hello Ray,

StMM == Standalone MM

Does the PI spec document that the standalone MM hob list is
read-only? If so, the HOB build routines shouldn't be exposed (and/or
ASSERT in DEBUG builds). If not, they should work.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108308): https://edk2.groups.io/g/devel/message/108308
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-05 21:29                 ` Oliver Smith-Denny
  2023-09-06  6:33                   ` Ni, Ray
@ 2023-09-06  7:35                   ` Nhi Pham via groups.io
  1 sibling, 0 replies; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-09-06  7:35 UTC (permalink / raw)
  To: Oliver Smith-Denny, devel, nhi, Ard Biesheuvel, michael.kubacki
  Cc: huangming, Sami Mujawar, Ard Biesheuvel, Jiewen Yao,
	Supreeth Venkatesh, ming.huang-

On 9/6/2023 4:29 AM, Oliver Smith-Denny wrote:

> On 9/4/2023 7:20 PM, Nhi Pham wrote:
>> On 9/2/2023 3:43 AM, Oliver Smith-Denny wrote:
>>> On 8/31/2023 1:20 AM, Nhi Pham via groups.io wrote:
>>>
>>> If I am understanding this correctly, this is only an issue when
>>> HOBs are created in StMM, i.e. not from HOBs that are passed in. Is 
>>> this
>>> correct?
>> Yes, the issue only occurs when HOB are created in StandaloneMM by 
>> the HOB library instance 
>> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf
>>>
>>> If so, is HOB creation in StMM and supported use case? The only 
>>> instance
>> I think it is intended to work as the CreateHob() function is 
>> implemented.
>
> Well, that may just be a copy/paste sort of thing :).
>
>>> a quick search turns up is the ARM StMM Core entry, where some
>>> information from TF-A is converted to HOB format. Do we have any other
>>> use cases (and curious more on this use case). My thought process would
>>> be that StMM would not create any HOBs. Depending on FW configuration,
>>> it may receive HOBs from PEI.
>>
>> I have a use case when enabling the UEFI Variable driver running in 
>> StandaloneMM. Instead of using the PCDs, the in-memory NVRAM region 
>> is allocated **dynamically** at boot time in the StMM secure memory. 
>> Then, they will be passed into the gVariableFlashInfoHobGuid for 
>> being consumed by other variable MM drivers.
>>
>
> I do believe that per the PI spec, we should have HOB producer and HOB
> consumer phases, where in this case PEI (if it was the launching entity
> for StMM) is the HOB producer and StMM is the HOB producer. This is the
> same pattern the PI spec details for PEI and DXE, where DXE is not
> intended to create new HOBs, but just to consume information from the
> previous phase.
>
> As I mentioned, there are other interfaces for passing information
> within a phase, such as protocols, dynamic PCDs, variables, etc. that
> are built for this application. I think it is useful to adhere to the
> model for HOBs (which are hand off blocks, one phase handing information
> to another phase) and that we will create more issues if we rely on
> HOB consumer phases producing HOBs.
Thanks Oliver for the explanation. That makes sense to me.
>
> My proposal would be to remove the HOB creation code from StMM
> completely. I believe in your use case that you are describing a dynamic
> PCD or a protocol could work to pass the information.
I think the dynamic PCD is supposed to not being supported in 
StandaloneMM and protocol does not fit because the Variable Flash Info 
is created in PEI for UEFI variable non-MM flow and in StMM for UEFI 
variable MM flow.
>
> If we are saying that prior to your patch that HOB creation in StMM was
> completely broken, anyway, it seems that folks were not relying on this
> code?

Right, it is just my curiosity that I don't see any showcase for 
Variable MM + Variable Flash Info HOB in StandaloneMM.

Adding Michael Kubacki as the owner of the Variable Flash Info HOB for 
getting further input.

>
> Thanks,
> Oliver


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108310): https://edk2.groups.io/g/devel/message/108310
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-06  6:33                   ` Ni, Ray
  2023-09-06  6:56                     ` Ard Biesheuvel
@ 2023-09-06  7:55                     ` Nhi Pham via groups.io
  2023-09-06  8:50                       ` Ard Biesheuvel
  1 sibling, 1 reply; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-09-06  7:55 UTC (permalink / raw)
  To: Ni, Ray, devel@edk2.groups.io, nhi@os.amperecomputing.com,
	Ard Biesheuvel, osde@linux.microsoft.com
  Cc: huangming@linux.alibaba.com, Sami Mujawar, Ard Biesheuvel,
	Yao, Jiewen, Supreeth Venkatesh, ming.huang-@outlook.com

On 9/6/2023 1:33 PM, Ni, Ray wrote:
> [EXTERNAL EMAIL NOTICE: This email originated from an external sender. 
> Please be mindful of safe email handling and proprietary information 
> protection practices.]
> 
> I am a bit confused.
> 
> The HOB list in standalone MM is read-only. Why could any module call 
> BuildGuidHob() to modify the HOB.
> 
> I saw Oliver mentioned something about StMM. I don't know what that is. 
> But it seems that's ARM specific. Then, I don't think it's proper to 
> modify code here for a specific arch ARM.

The HOB creation is available in the 
StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf. If 
other architectures also use that instance, I think the issue is not 
specific to ARM.

Regards,
-Nhi
> 
> Thanks,
> Ray
> ------------------------------------------------------------------------
> *From:* devel@edk2.groups.io <devel@edk2.groups.io> on behalf of Oliver 
> Smith-Denny <osde@linux.microsoft.com>
> *Sent:* Wednesday, September 6, 2023 5:29 AM
> *To:* Nhi Pham <nhi@amperemail.onmicrosoft.com>; devel@edk2.groups.io 
> <devel@edk2.groups.io>; nhi@os.amperecomputing.com 
> <nhi@os.amperecomputing.com>; Ard Biesheuvel <ardb@kernel.org>
> *Cc:* huangming@linux.alibaba.com <huangming@linux.alibaba.com>; Sami 
> Mujawar <sami.mujawar@arm.com>; Ard Biesheuvel 
> <ardb+tianocore@kernel.org>; Yao, Jiewen <jiewen.yao@intel.com>; 
> Supreeth Venkatesh <supreeth.venkatesh@arm.com>; ming.huang-@outlook.com 
> <ming.huang-@outlook.com>
> *Subject:* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB 
> space and heap space conflicted issue
> On 9/4/2023 7:20 PM, Nhi Pham wrote:
>> On 9/2/2023 3:43 AM, Oliver Smith-Denny wrote:
>>> On 8/31/2023 1:20 AM, Nhi Pham via groups.io wrote:
>>>
>>> If I am understanding this correctly, this is only an issue when
>>> HOBs are created in StMM, i.e. not from HOBs that are passed in. Is this
>>> correct?
>> Yes, the issue only occurs when HOB are created in StandaloneMM by the 
>> HOB library instance 
>> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf
>>>
>>> If so, is HOB creation in StMM and supported use case? The only instance
>> I think it is intended to work as the CreateHob() function is implemented.
> 
> Well, that may just be a copy/paste sort of thing :).
> 
>>> a quick search turns up is the ARM StMM Core entry, where some
>>> information from TF-A is converted to HOB format. Do we have any other
>>> use cases (and curious more on this use case). My thought process would
>>> be that StMM would not create any HOBs. Depending on FW configuration,
>>> it may receive HOBs from PEI.
>> 
>> I have a use case when enabling the UEFI Variable driver running in 
>> StandaloneMM. Instead of using the PCDs, the in-memory NVRAM region is 
>> allocated **dynamically** at boot time in the StMM secure memory. Then, 
>> they will be passed into the gVariableFlashInfoHobGuid for being 
>> consumed by other variable MM drivers.
>> 
> 
> I do believe that per the PI spec, we should have HOB producer and HOB
> consumer phases, where in this case PEI (if it was the launching entity
> for StMM) is the HOB producer and StMM is the HOB producer. This is the
> same pattern the PI spec details for PEI and DXE, where DXE is not
> intended to create new HOBs, but just to consume information from the
> previous phase.
> 
> As I mentioned, there are other interfaces for passing information
> within a phase, such as protocols, dynamic PCDs, variables, etc. that
> are built for this application. I think it is useful to adhere to the
> model for HOBs (which are hand off blocks, one phase handing information
> to another phase) and that we will create more issues if we rely on
> HOB consumer phases producing HOBs.
> 
> My proposal would be to remove the HOB creation code from StMM
> completely. I believe in your use case that you are describing a dynamic
> PCD or a protocol could work to pass the information.
> 
> If we are saying that prior to your patch that HOB creation in StMM was
> completely broken, anyway, it seems that folks were not relying on this
> code?
> 
> Thanks,
> Oliver
> 
> 
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108311): https://edk2.groups.io/g/devel/message/108311
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-06  7:55                     ` Nhi Pham via groups.io
@ 2023-09-06  8:50                       ` Ard Biesheuvel
  2023-09-06 16:22                         ` Oliver Smith-Denny
  0 siblings, 1 reply; 22+ messages in thread
From: Ard Biesheuvel @ 2023-09-06  8:50 UTC (permalink / raw)
  To: Nhi Pham
  Cc: Ni, Ray, devel@edk2.groups.io, nhi@os.amperecomputing.com,
	osde@linux.microsoft.com, huangming@linux.alibaba.com,
	Sami Mujawar, Ard Biesheuvel, Yao, Jiewen, Supreeth Venkatesh,
	ming.huang-@outlook.com

On Wed, 6 Sept 2023 at 09:56, Nhi Pham <nhi@amperemail.onmicrosoft.com> wrote:
>
> On 9/6/2023 1:33 PM, Ni, Ray wrote:
> > [EXTERNAL EMAIL NOTICE: This email originated from an external sender.
> > Please be mindful of safe email handling and proprietary information
> > protection practices.]
> >
> > I am a bit confused.
> >
> > The HOB list in standalone MM is read-only. Why could any module call
> > BuildGuidHob() to modify the HOB.
> >
> > I saw Oliver mentioned something about StMM. I don't know what that is.
> > But it seems that's ARM specific. Then, I don't think it's proper to
> > modify code here for a specific arch ARM.
>
> The HOB creation is available in the
> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf. If
> other architectures also use that instance, I think the issue is not
> specific to ARM.
>

The question here is whether the implementation follows the PI spec,
and whether HOB creation should be supported to begin with.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108315): https://edk2.groups.io/g/devel/message/108315
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-06  8:50                       ` Ard Biesheuvel
@ 2023-09-06 16:22                         ` Oliver Smith-Denny
  2023-09-07 15:38                           ` Nhi Pham via groups.io
  0 siblings, 1 reply; 22+ messages in thread
From: Oliver Smith-Denny @ 2023-09-06 16:22 UTC (permalink / raw)
  To: devel, ardb, Nhi Pham
  Cc: Ni, Ray, nhi@os.amperecomputing.com, huangming@linux.alibaba.com,
	Sami Mujawar, Ard Biesheuvel, Yao, Jiewen, Supreeth Venkatesh,
	ming.huang-@outlook.com

On 9/6/2023 1:50 AM, Ard Biesheuvel wrote:
> On Wed, 6 Sept 2023 at 09:56, Nhi Pham <nhi@amperemail.onmicrosoft.com> wrote:
>>
>> On 9/6/2023 1:33 PM, Ni, Ray wrote:
>>> [EXTERNAL EMAIL NOTICE: This email originated from an external sender.
>>> Please be mindful of safe email handling and proprietary information
>>> protection practices.]
>>>
>>> I am a bit confused.
>>>
>>> The HOB list in standalone MM is read-only. Why could any module call
>>> BuildGuidHob() to modify the HOB.
>>>
>>> I saw Oliver mentioned something about StMM. I don't know what that is.
>>> But it seems that's ARM specific. Then, I don't think it's proper to
>>> modify code here for a specific arch ARM.
>>
>> The HOB creation is available in the
>> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf. If
>> other architectures also use that instance, I think the issue is not
>> specific to ARM.
>>
> 
> The question here is whether the implementation follows the PI spec,
> and whether HOB creation should be supported to begin with.
> 

My reading of the PI spec is that this implementation does not follow
it. However, the PI spec is not very explicit about Standalone MM in
general, but particularly in relation to HOBs.

However, in the generic HOB section of PI spec v1.7, Vol. 3, section 4
(entitled HOB Design Discussion) it explicitly lays out that there are
HOB producer phases and HOB consumer phases. It uses PEI as a HOB
producer phase and DXE as a HOB consumer phase and explicitly says
that the HOB consumer phase must treat HOBs as read-only memory, per
Ray's comment.

In vol. 4, section 2.2, in discussing the Standalone MM entry point,
the document talks about the HOB list being passed to Standalone MM
to consume, which per the reading of the above section would classify
Standalone MM as a HOB consumer phase, where HOBs should then be
read-only.

So, I believe that we should not support HOB creation in Standalone MM
and instead rely on other mechanisms to pass information within the
phase. Per Nhi's other email in this thread, we should have the
discussion on how to solve that specific problem and that may well
lead to a discussion on whether HOBs are in fact the right mechanism
here, but I tend to lean towards leaving something as architectural as
HOBs to what the PI spec defines and using different mechanisms to
accomplish in-phase communication.

Does this reading of the spec align with others' expectations? As I
mentioned to Ray in another thread, Standalone MM feels like it could
have extra clarification in a few areas in the PI spec.

Thanks,
Oliver


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108333): https://edk2.groups.io/g/devel/message/108333
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-06 16:22                         ` Oliver Smith-Denny
@ 2023-09-07 15:38                           ` Nhi Pham via groups.io
  2023-11-30 13:59                             ` Nhi Pham via groups.io
  0 siblings, 1 reply; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-09-07 15:38 UTC (permalink / raw)
  To: Oliver Smith-Denny, devel, ardb
  Cc: Ni, Ray, nhi@os.amperecomputing.com, huangming@linux.alibaba.com,
	Sami Mujawar, Ard Biesheuvel, Yao, Jiewen, Supreeth Venkatesh,
	ming.huang-@outlook.com

On 9/6/2023 11:22 PM, Oliver Smith-Denny wrote:
> On 9/6/2023 1:50 AM, Ard Biesheuvel wrote:
>> On Wed, 6 Sept 2023 at 09:56, Nhi Pham 
>> <nhi@amperemail.onmicrosoft.com> wrote:
>>>
>>> On 9/6/2023 1:33 PM, Ni, Ray wrote:
>>>> [EXTERNAL EMAIL NOTICE: This email originated from an external sender.
>>>> Please be mindful of safe email handling and proprietary information
>>>> protection practices.]
>>>>
>>>> I am a bit confused.
>>>>
>>>> The HOB list in standalone MM is read-only. Why could any module call
>>>> BuildGuidHob() to modify the HOB.
>>>>
>>>> I saw Oliver mentioned something about StMM. I don't know what that 
>>>> is.
>>>> But it seems that's ARM specific. Then, I don't think it's proper to
>>>> modify code here for a specific arch ARM.
>>>
>>> The HOB creation is available in the
>>> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf. If
>>> other architectures also use that instance, I think the issue is not
>>> specific to ARM.
>>>
>>
>> The question here is whether the implementation follows the PI spec,
>> and whether HOB creation should be supported to begin with.
>>
>
> My reading of the PI spec is that this implementation does not follow
> it. However, the PI spec is not very explicit about Standalone MM in
> general, but particularly in relation to HOBs.
>
> However, in the generic HOB section of PI spec v1.7, Vol. 3, section 4
> (entitled HOB Design Discussion) it explicitly lays out that there are
> HOB producer phases and HOB consumer phases. It uses PEI as a HOB
> producer phase and DXE as a HOB consumer phase and explicitly says
> that the HOB consumer phase must treat HOBs as read-only memory, per
> Ray's comment.
>
> In vol. 4, section 2.2, in discussing the Standalone MM entry point,
> the document talks about the HOB list being passed to Standalone MM
> to consume, which per the reading of the above section would classify
> Standalone MM as a HOB consumer phase, where HOBs should then be
> read-only.
>
> So, I believe that we should not support HOB creation in Standalone MM
> and instead rely on other mechanisms to pass information within the
> phase. Per Nhi's other email in this thread, we should have the
> discussion on how to solve that specific problem and that may well
> lead to a discussion on whether HOBs are in fact the right mechanism
> here, but I tend to lean towards leaving something as architectural as
> HOBs to what the PI spec defines and using different mechanisms to
> accomplish in-phase communication.
Thanks Oliver so much for that. I agree. We should focus on my specific 
problem with UEFI Variable Flash Info in StandaloneMM in another thread.
>
> Does this reading of the spec align with others' expectations? As I
> mentioned to Ray in another thread, Standalone MM feels like it could
> have extra clarification in a few areas in the PI spec.

Thanks again. The HOB library should be updated to remove the HOB 
creation once we have the clarification.

Regards,

Nhi

>
> Thanks,
> Oliver


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108403): https://edk2.groups.io/g/devel/message/108403
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-09-07 15:38                           ` Nhi Pham via groups.io
@ 2023-11-30 13:59                             ` Nhi Pham via groups.io
  2023-12-01  5:29                               ` Ni, Ray
  0 siblings, 1 reply; 22+ messages in thread
From: Nhi Pham via groups.io @ 2023-11-30 13:59 UTC (permalink / raw)
  To: Oliver Smith-Denny, devel, ardb
  Cc: Ni, Ray, huangming@linux.alibaba.com, Sami Mujawar,
	Ard Biesheuvel, Yao, Jiewen, Supreeth Venkatesh,
	ming.huang-@outlook.com

On 9/7/2023 10:38 PM, Nhi Pham wrote:
> On 9/6/2023 11:22 PM, Oliver Smith-Denny wrote:
>> On 9/6/2023 1:50 AM, Ard Biesheuvel wrote:
>>> On Wed, 6 Sept 2023 at 09:56, Nhi Pham
>>> <nhi@amperemail.onmicrosoft.com> wrote:
>>>>
>>>> On 9/6/2023 1:33 PM, Ni, Ray wrote:
>>>>> [EXTERNAL EMAIL NOTICE: This email originated from an external sender.
>>>>> Please be mindful of safe email handling and proprietary information
>>>>> protection practices.]
>>>>>
>>>>> I am a bit confused.
>>>>>
>>>>> The HOB list in standalone MM is read-only. Why could any module call
>>>>> BuildGuidHob() to modify the HOB.
>>>>>
>>>>> I saw Oliver mentioned something about StMM. I don't know what that
>>>>> is.
>>>>> But it seems that's ARM specific. Then, I don't think it's proper to
>>>>> modify code here for a specific arch ARM.
>>>>
>>>> The HOB creation is available in the
>>>> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf. If
>>>> other architectures also use that instance, I think the issue is not
>>>> specific to ARM.
>>>>
>>>
>>> The question here is whether the implementation follows the PI spec,
>>> and whether HOB creation should be supported to begin with.
>>>
>>
>> My reading of the PI spec is that this implementation does not follow
>> it. However, the PI spec is not very explicit about Standalone MM in
>> general, but particularly in relation to HOBs.
>>
>> However, in the generic HOB section of PI spec v1.7, Vol. 3, section 4
>> (entitled HOB Design Discussion) it explicitly lays out that there are
>> HOB producer phases and HOB consumer phases. It uses PEI as a HOB
>> producer phase and DXE as a HOB consumer phase and explicitly says
>> that the HOB consumer phase must treat HOBs as read-only memory, per
>> Ray's comment.
>>
>> In vol. 4, section 2.2, in discussing the Standalone MM entry point,
>> the document talks about the HOB list being passed to Standalone MM
>> to consume, which per the reading of the above section would classify
>> Standalone MM as a HOB consumer phase, where HOBs should then be
>> read-only.
>>
>> So, I believe that we should not support HOB creation in Standalone MM
>> and instead rely on other mechanisms to pass information within the
>> phase. Per Nhi's other email in this thread, we should have the
>> discussion on how to solve that specific problem and that may well
>> lead to a discussion on whether HOBs are in fact the right mechanism
>> here, but I tend to lean towards leaving something as architectural as
>> HOBs to what the PI spec defines and using different mechanisms to
>> accomplish in-phase communication.
> Thanks Oliver so much for that. I agree. We should focus on my specific
> problem with UEFI Variable Flash Info in StandaloneMM in another thread.
>>
>> Does this reading of the spec align with others' expectations? As I
>> mentioned to Ray in another thread, Standalone MM feels like it could
>> have extra clarification in a few areas in the PI spec.
> 
> Thanks again. The HOB library should be updated to remove the HOB
> creation once we have the clarification.

I found that we can hook a platform NULL library class to the
StandaloneMmCore to create UEFI Variable Flash Info HOB. This way is
compliant to the spec as the HOB is created in MM_CORE_STANDALONE phase.

Should I write a patch to remove the HOB creation in StandaloneMmHobLib?

Regards,
Nhi



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111903): https://edk2.groups.io/g/devel/message/111903
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue
  2023-11-30 13:59                             ` Nhi Pham via groups.io
@ 2023-12-01  5:29                               ` Ni, Ray
  0 siblings, 0 replies; 22+ messages in thread
From: Ni, Ray @ 2023-12-01  5:29 UTC (permalink / raw)
  To: Nhi Pham, Oliver Smith-Denny, devel@edk2.groups.io,
	ardb@kernel.org
  Cc: huangming@linux.alibaba.com, Sami Mujawar, Ard Biesheuvel,
	Yao, Jiewen, Supreeth Venkatesh, ming.huang-@outlook.com

Yes please!

Thanks,
Ray
> -----Original Message-----
> From: Nhi Pham <nhi@os.amperecomputing.com>
> Sent: Thursday, November 30, 2023 9:59 PM
> To: Oliver Smith-Denny <osde@linux.microsoft.com>; devel@edk2.groups.io;
> ardb@kernel.org
> Cc: Ni, Ray <ray.ni@intel.com>; huangming@linux.alibaba.com; Sami Mujawar
> <sami.mujawar@arm.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>;
> Yao, Jiewen <jiewen.yao@intel.com>; Supreeth Venkatesh
> <supreeth.venkatesh@arm.com>; ming.huang-@outlook.com
> Subject: Re: [edk2-devel] [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space
> and heap space conflicted issue
> 
> On 9/7/2023 10:38 PM, Nhi Pham wrote:
> > On 9/6/2023 11:22 PM, Oliver Smith-Denny wrote:
> >> On 9/6/2023 1:50 AM, Ard Biesheuvel wrote:
> >>> On Wed, 6 Sept 2023 at 09:56, Nhi Pham
> >>> <nhi@amperemail.onmicrosoft.com> wrote:
> >>>>
> >>>> On 9/6/2023 1:33 PM, Ni, Ray wrote:
> >>>>> [EXTERNAL EMAIL NOTICE: This email originated from an external
> sender.
> >>>>> Please be mindful of safe email handling and proprietary information
> >>>>> protection practices.]
> >>>>>
> >>>>> I am a bit confused.
> >>>>>
> >>>>> The HOB list in standalone MM is read-only. Why could any module call
> >>>>> BuildGuidHob() to modify the HOB.
> >>>>>
> >>>>> I saw Oliver mentioned something about StMM. I don't know what that
> >>>>> is.
> >>>>> But it seems that's ARM specific. Then, I don't think it's proper to
> >>>>> modify code here for a specific arch ARM.
> >>>>
> >>>> The HOB creation is available in the
> >>>>
> StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf.
> If
> >>>> other architectures also use that instance, I think the issue is not
> >>>> specific to ARM.
> >>>>
> >>>
> >>> The question here is whether the implementation follows the PI spec,
> >>> and whether HOB creation should be supported to begin with.
> >>>
> >>
> >> My reading of the PI spec is that this implementation does not follow
> >> it. However, the PI spec is not very explicit about Standalone MM in
> >> general, but particularly in relation to HOBs.
> >>
> >> However, in the generic HOB section of PI spec v1.7, Vol. 3, section 4
> >> (entitled HOB Design Discussion) it explicitly lays out that there are
> >> HOB producer phases and HOB consumer phases. It uses PEI as a HOB
> >> producer phase and DXE as a HOB consumer phase and explicitly says
> >> that the HOB consumer phase must treat HOBs as read-only memory, per
> >> Ray's comment.
> >>
> >> In vol. 4, section 2.2, in discussing the Standalone MM entry point,
> >> the document talks about the HOB list being passed to Standalone MM
> >> to consume, which per the reading of the above section would classify
> >> Standalone MM as a HOB consumer phase, where HOBs should then be
> >> read-only.
> >>
> >> So, I believe that we should not support HOB creation in Standalone MM
> >> and instead rely on other mechanisms to pass information within the
> >> phase. Per Nhi's other email in this thread, we should have the
> >> discussion on how to solve that specific problem and that may well
> >> lead to a discussion on whether HOBs are in fact the right mechanism
> >> here, but I tend to lean towards leaving something as architectural as
> >> HOBs to what the PI spec defines and using different mechanisms to
> >> accomplish in-phase communication.
> > Thanks Oliver so much for that. I agree. We should focus on my specific
> > problem with UEFI Variable Flash Info in StandaloneMM in another thread.
> >>
> >> Does this reading of the spec align with others' expectations? As I
> >> mentioned to Ray in another thread, Standalone MM feels like it could
> >> have extra clarification in a few areas in the PI spec.
> >
> > Thanks again. The HOB library should be updated to remove the HOB
> > creation once we have the clarification.
> 
> I found that we can hook a platform NULL library class to the
> StandaloneMmCore to create UEFI Variable Flash Info HOB. This way is
> compliant to the spec as the HOB is created in MM_CORE_STANDALONE
> phase.
> 
> Should I write a patch to remove the HOB creation in StandaloneMmHobLib?
> 
> Regards,
> Nhi



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111969): https://edk2.groups.io/g/devel/message/111969
Mute This Topic: https://groups.io/mt/89020085/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2023-12-01  5:29 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-09 12:25 [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang
2022-02-09 12:25 ` [PATCH v1 1/2] StandaloneMmPkg/Hob: Assert or return NULL for create hob failed Ming Huang
2022-02-09 12:25 ` [PATCH v1 2/2] StandaloneMmPkg: Fix HOB space and heap space conflicted issue Ming Huang
2022-05-03  9:10   ` Ard Biesheuvel
2022-05-12 10:09     ` [edk2-devel] " Ming Huang
2023-08-16  8:55       ` Nhi Pham via groups.io
2023-08-30 13:10         ` Ard Biesheuvel
2023-08-31  8:20           ` Nhi Pham via groups.io
2023-09-01 20:43             ` Oliver Smith-Denny
2023-09-05  2:20               ` Nhi Pham via groups.io
2023-09-05 21:29                 ` Oliver Smith-Denny
2023-09-06  6:33                   ` Ni, Ray
2023-09-06  6:56                     ` Ard Biesheuvel
2023-09-06  7:55                     ` Nhi Pham via groups.io
2023-09-06  8:50                       ` Ard Biesheuvel
2023-09-06 16:22                         ` Oliver Smith-Denny
2023-09-07 15:38                           ` Nhi Pham via groups.io
2023-11-30 13:59                             ` Nhi Pham via groups.io
2023-12-01  5:29                               ` Ni, Ray
2023-09-06  7:35                   ` Nhi Pham via groups.io
     [not found]       ` <177BD141FD103BE4.8497@groups.io>
2023-08-29  2:48         ` Nhi Pham via groups.io
2022-03-30  9:35 ` [PATCH v1 0/2] Fix StandaloneMmPkg HOB issue Ming Huang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox