The unique Stack HOB describes the initial memory area used as stack and
PEI heap.

UpdateStackHob() -- called by the various platforms' HandOffToDxeCore()
functions -- modifies this HOB before it is passed to the DXE phase. The
UpdateStackHob() function repoints the Stack HOB at the memory area that
the DXE phase will actually use as stack.

However, as the function explains, the original area must be kept around
as well (DXE must not reclaim it), because  "some PEIMs may [...] keep key
information on the stack". For this end, UpdateStackHob() creates a new
memory allocation HOB that covers the original area.

Currently, the new memory allocation HOB doesn't honor / mirror the
original memory allocation type; it describes the old area invariably as
EfiBootServicesData. Normally this is alright, but it causes problems if
the original stack area was destined for a lifetime longer than
EfiBootServicesData, for example EfiACPIMemoryNVS.

Change UpdateStackHob() so that it preserves not only the boundaries of
the original area, but its allocation type too, in the new HOB.

The patch makes no visible difference if the original allocation type too
was EfiBootServicesData.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <ler...@redhat.com>
---
 MdeModulePkg/Core/DxeIplPeim/DxeLoad.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeLoad.c 
b/MdeModulePkg/Core/DxeIplPeim/DxeLoad.c
index aa05076..a67aa88 100644
--- a/MdeModulePkg/Core/DxeIplPeim/DxeLoad.c
+++ b/MdeModulePkg/Core/DxeIplPeim/DxeLoad.c
@@ -743,13 +743,14 @@ UpdateStackHob (
       BuildMemoryAllocationHob (
         Hob.MemoryAllocationStack->AllocDescriptor.MemoryBaseAddress,
         Hob.MemoryAllocationStack->AllocDescriptor.MemoryLength,
-        EfiBootServicesData
+        Hob.MemoryAllocationStack->AllocDescriptor.MemoryType
         );
       //
       // Update the BSP Stack Hob to reflect the new stack info.
       //
       Hob.MemoryAllocationStack->AllocDescriptor.MemoryBaseAddress = 
BaseAddress;
       Hob.MemoryAllocationStack->AllocDescriptor.MemoryLength = Length;
+      Hob.MemoryAllocationStack->AllocDescriptor.MemoryType = 
EfiBootServicesData;
       break;
     }
     Hob.Raw = GET_NEXT_HOB (Hob);
-- 
1.8.3.1



------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to