> On Jun 9, 2022, at 10:28 AM, Ayush Singh <ayushdevel1...@gmail.com> wrote:
> 
> Hello everyone,
> 
> Can anyone help me with understanding dynamic memory management in PEI
> phase? In the UEFI Platform Integration Specification, version 1.7
> Errata A, Section 4.6, PEI Memory services are given which include:
> 
> 1. InstallPeiMemory()

This is basically:
(*PeiServices)->InstallPeiMemory (PeiServices, MemoryBegin, MemoryLength);

This is how you tell the PEI Core the location of the memory that will can be 
used in PEI. 

> 2. AllocatePages()
> 3. AllocatePool()
> 4. CopyMem()
> 5. SetMem()
> 6. FreePages()
> 
> However, no `FreePool()` service seems to be present. So how is the
> memory allocated using `AllocatePool()` freed?
> 

It basically gets Freed when you transition to the DXE phase. 

To step back for a minute I think it is important to remember that the main job 
of PEI is to initialize DRAM, and deal with S3 (resuming from suspend to RAM). 
So as soon as you have DRAM you are kind done and ready for the DXE IPL so you 
can load the DXE Phase and start up EFI. Remember PEI is Pre EFI. The reality 
is programming DRAM is complex and lots of code got written, then lots more 
code got written and PEI has become large for some ports. That was never the 
intent. PEI is designed as a way to run C code when you code is running from 
ROM and you don’t have any DRAM. For x86 not having DRAM means you are using 
the cache as RAM. For some SoCs there is actually an SRAM you can use. Thus the 
PEI memory allocation scheme is designed to deal with this very constrained 
environment. 

You start PEI with a heap and stack. You can also allocate HOBs (Hand Off 
Blocks). A pool allocation in PEI is just a HOB. See [1]. There is no way to 
free a HOB. So the AllocatePool() kind of leaks into DXE too as an entry in the 
HOB list. But when the OS called gBS->ExitBootServices() that frees all non 
runtime memory back to the OS. 

If you look a AllocatePages/FreePages you will see AllocatePages creates a HOB 
that points to the memory region, and FreePages just marks that HOB as not 
used. That code is also in this file [1]. 

TL;DR there is no pool manager in PEI. 

[1] 
https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Pei/Memory/MemoryServices.c#L878


Thanks,

Andrew Fish

> Ayush Singh
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90419): https://edk2.groups.io/g/devel/message/90419
Mute This Topic: https://groups.io/mt/91651322/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to