On Thu, Jun 23, 2016 at 12:34:50PM +0100, Matt Fleming wrote:
> 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.
> 
> Cc: 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: Dave Young <[email protected]>
> Cc: Josh Boyer <[email protected]>
> Cc: Josh Triplett <[email protected]>
> Cc: Andy Lutomirski <[email protected]>
> Cc: Môshe van der Sterre <[email protected]>
> Signed-off-by: Matt Fleming <[email protected]>

Reviewed-by: Josh Triplett <[email protected]>

This definitely seems like an improvement.

>  arch/x86/platform/efi/efi-bgrt.c | 13 ++-----------
>  1 file changed, 2 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/x86/platform/efi/efi-bgrt.c 
> b/arch/x86/platform/efi/efi-bgrt.c
> index 6a2f5691b1ab..6aad870e8962 100644
> --- a/arch/x86/platform/efi/efi-bgrt.c
> +++ b/arch/x86/platform/efi/efi-bgrt.c
> @@ -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);
>  }
> -- 
> 2.7.3
> 

Reply via email to