x86/efi-bgrt: Use efi_mem_reserve() to avoid copying image data

efi_mem_reserve() allows us to permanently mark EFI boot services
regions as reserved, which means we no longer need to copy the image
data out and into a separate buffer.

Leaving the data in the original boot services region has the added
benefit that BGRT images can now be passed across kexec reboot.

Reviewed-by: Josh Triplett <[email protected]>
Tested-by: Dave Young <[email protected]> [kexec/kdump]
Tested-by: Ard Biesheuvel <[email protected]> [arm]
Acked-by: Ard Biesheuvel <[email protected]>
Cc: Leif Lindholm <[email protected]>
Cc: Peter Jones <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Josh Boyer <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Môshe van der Sterre <[email protected]>
Signed-off-by: Matt Fleming <[email protected]>
This commit is contained in:
Matt Fleming committed 2016-09-09 16:08:38 +01:00
1 parent 8e80632fb2
commit 4bc9f92e64
1 file changed
+2 -11
+2 -11
View File
@@ -82,21 +82,12 @@ void __init efi_bgrt_init(void)
}
bgrt_image_size = bmp_header.size;
bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL | __GFP_NOWARN);
bgrt_image = memremap(bgrt_tab->image_address, bmp_header.size, MEMREMAP_WB);
if (!bgrt_image) {
pr_notice("Ignoring BGRT: failed to allocate memory for image (wanted %zu bytes)\n",
bgrt_image_size);
return;
}
image = memremap(bgrt_tab->image_address, bmp_header.size, MEMREMAP_WB);
if (!image) {
pr_notice("Ignoring BGRT: failed to map image memory\n");
kfree(bgrt_image);
bgrt_image = NULL;
return;
}
memcpy(bgrt_image, image, bgrt_image_size);
memunmap(image);
efi_mem_reserve(bgrt_tab->image_address, bgrt_image_size);
}