Re: [PATCH] x86/efi: update e820 about reserved EFI boot services data to fix kexec breakage

From: Michael Weiser
Date: Thu Dec 05 2019 - 16:30:56 EST


On Thu, Dec 05, 2019 at 06:55:45PM +0800, Dave Young wrote:

> > esrt: Unsupported ESRT version 2904149718861218184.
> >
> > The ESRT memory stays in EFI boot services data, and it was reserved
> > in kernel via efi_mem_reserve(). The initial purpose of the reservation
> > is to reuse the EFI boot services data across kexec reboot. For example
> > the BGRT image data and some ESRT memory like Michael reported.
> >
> > But although the memory is reserved it is not updated in the X86 E820 table,
> > and kexec_file_load() iterates system RAM in the IO resource list to find places
> > for kernel, initramfs and other stuff. In Michael's case the kexec loaded
> > initramfs overwrote the ESRT memory and then the failure happened.
> >
> > Since kexec_file_load() depends on the E820 table being updated, just fix this
> > by updating the reserved EFI boot services memory as reserved type in E820.
> Thanks for the amending, also thank all for the review and test.

Same from me, particularly everyone's patience with my haphazard
guesswork around an area I clearly know nothing about. :)
--
Thanks,
Michael