Messages in this thread | | | Date | Thu, 30 Jun 2016 07:41:43 -0700 | From | Josh Triplett <> | Subject | Re: [PATCH 11/11] x86/efi-bgrt: Use efi_mem_reserve() to avoid copying image data |
| |
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 <ard.biesheuvel@linaro.org> > Cc: Leif Lindholm <leif.lindholm@linaro.org> > Cc: Peter Jones <pjones@redhat.com> > Cc: Borislav Petkov <bp@alien8.de> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Dave Young <dyoung@redhat.com> > Cc: Josh Boyer <jwboyer@fedoraproject.org> > Cc: Josh Triplett <josh@joshtriplett.org> > Cc: Andy Lutomirski <luto@amacapital.net> > Cc: Môshe van der Sterre <me@moshe.nl> > Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
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 >
| |