EFI memory allocation operates in 4k pages, but the firmware memory allocator used 0x3ff in several places rather than 0xfff. ---
ChangeLog entry: 2013-11-13 Josh Triplett <j...@joshtriplett.org> * grub-core/mmap/efi/mmap.c (grub_mmap_register): Round up/down to 4k page boundaries as expected by firmware rather than 1k boundaries. (grub_mmap_malign_and_register): Likewise. grub-core/mmap/efi/mmap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grub-core/mmap/efi/mmap.c b/grub-core/mmap/efi/mmap.c index 4f17c8b..a77efe8 100644 --- a/grub-core/mmap/efi/mmap.c +++ b/grub-core/mmap/efi/mmap.c @@ -184,8 +184,8 @@ grub_mmap_register (grub_uint64_t start, grub_uint64_t size, int type) return 0; b = grub_efi_system_table->boot_services; - address = start & (~0x3ffULL); - pages = (end - address + 0x3ff) >> 12; + address = start & (~0xfffULL); + pages = (end - address + 0xfff) >> 12; status = efi_call_2 (b->free_pages, address, pages); if (status != GRUB_EFI_SUCCESS && status != GRUB_EFI_NOT_FOUND) { @@ -263,7 +263,7 @@ grub_mmap_malign_and_register (grub_uint64_t align __attribute__ ((unused)), atype = GRUB_EFI_ALLOCATE_ANY_PAGES; #endif - pages = (size + 0x3ff) >> 12; + pages = (size + 0xfff) >> 12; status = efi_call_4 (b->allocate_pages, atype, make_efi_memtype (type), pages, &address); if (status != GRUB_EFI_SUCCESS) -- 1.8.4.3 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel