On 01/20/17 17:05, Ard Biesheuvel wrote: > After a recent change to the AArch64 page table code, the root table > of the page tables is allocated using AllocatePool() rather than > AllocatePages() if its size is much smaller than a page. E.g., when > using 40 bits of translation, the root table only takes up 16 bytes > > However, what I have noticed is that pool allocations made during PEI > are listed as available memory in the EFI memory map (using memmap in > the UEFI Shell). Is this expected? Is it part of the contract that > AllocatePool() allocations are lost when entering DXE?
Pool allocations in PEI are satisfied with HOBs (and therefore the pool allocation sizes are limited to ~64KB). In addition, soon after permanent PEI RAM is installed, objects from the temporary SEC/PEI heap are moved there (this is called "temporary RAM migration"). This includes the migration of the full HOB list, including those that were used to satisfy pool allocations prior to RAM migration. If you want to allocate memory in PEI that is to survive in-place into DXE and later, I can think of two ways: - Call AllocatePages. This will only work after permanent PEI RAM has been installed (so you might want to make the PEIM performing the call dependent on gEfiPeiMemoryDiscoveredPpiGuid, with a DEPEX). The allocation will be carved out of the permanent PEI RAM. - Allocate a region (a whole multiple of pages) outside of the permanent PEI RAM, but in a spot that will later on be backed by system memory (due to a system memory resource descriptor HOB produced in PEI, or due to a GCD memory space addition during DXE). The way to perform this kind of allocation is simply to produce a memory allocation HOB, covering the range in question. This works even before the installation of permanent PEI RAM. ... I hope I remembered most of this stuff right. Thanks Laszlo _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

