]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: allocate the EFI memory map for Linux as Loader Data
authorLaszlo Ersek <lersek@redhat.com>
Sun, 18 Aug 2013 07:03:51 +0000 (07:03 +0000)
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 18 Aug 2013 07:03:51 +0000 (07:03 +0000)
In Linux, efi_memblock_x86_reserve_range() and efi_reserve_boot_services()
expect that whoever allocates the EFI memmap allocates it in Loader Data
type memory. Linux's own exit_boot()-->low_alloc() complies, but
SetupLinuxMemmap() in LoadLinuxLib doesn't.

The memory type discrepancy leads to efi_memblock_x86_reserve_range() and
efi_reserve_boot_services() both trying to reserve the range backing the
memmap, resulting in memmap entry truncation in
efi_reserve_boot_services().

This fix also makes this allocation consistent with all other persistent
allocations in  "OvmfPkg/Library/LoadLinuxLib/Linux.c".

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reported-and-tested-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14555 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/Library/LoadLinuxLib/Linux.c

index cd673aa087c8959be12bf98a9b2325812c696d48..4a3e2c13cb349eb9ce481bf419c7a61045ab6e9b 100644 (file)
@@ -280,8 +280,12 @@ SetupLinuxMemmap (
   // Enlarge space here, because we will allocate pool now.\r
   //\r
   MemoryMapSize += EFI_PAGE_SIZE;\r
-  MemoryMap = AllocatePool (MemoryMapSize);\r
-  ASSERT (MemoryMap != NULL);\r
+  Status = gBS->AllocatePool (\r
+                  EfiLoaderData,\r
+                  MemoryMapSize,\r
+                  (VOID **) &MemoryMap\r
+                  );\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
   // Get System MemoryMap\r