[PATCH 0/2] arm64: kexec_file_load vs memory reservations
Marc Zyngier
maz at kernel.org
Wed May 12 11:04:24 PDT 2021
+ Dave Young, which I accidentally missed in my initial post
On Thu, 29 Apr 2021 14:35:31 +0100,
Marc Zyngier <maz at kernel.org> wrote:
>
> It recently became apparent that using kexec with kexec_file_load() on
> arm64 is pretty similar to playing Russian roulette.
>
> Depending on the amount of memory, the HW supported and the firmware
> interface used, your secondary kernel may overwrite critical memory
> regions without which the secondary kernel cannot boot (the GICv3 LPI
> tables being a prime example of such reserved regions).
>
> It turns out that there is at least two ways for reserved memory
> regions to be described to kexec: /proc/iomem for the userspace
> implementation, and memblock.reserved for kexec_file. And of course,
> our LPI tables are only reserved using the resource tree, leading to
> the aforementioned stamping. Similar things could happen with ACPI
> tables as well.
>
> On my 24xA53 system artificially limited to 256MB of RAM (yes, it
> boots with that little memory), trying to kexec a secondary kernel
> failed every times. I can only presume that this was mostly tested
> using kdump, which preserves the entire kernel memory range.
>
> This small series aims at triggering a discussion on what are the
> expectations for kexec_file, and whether we should unify the two
> reservation mechanisms.
>
> And in the meantime, it gets things going...
>
> Marc Zyngier (2):
> firmware/efi: Tell memblock about EFI reservations
> ACPI: arm64: Reserve the ACPI tables in memblock
>
> arch/arm64/kernel/acpi.c | 1 +
> drivers/firmware/efi/efi.c | 23 ++++++++++++++++++++++-
> 2 files changed, 23 insertions(+), 1 deletion(-)
Any comment on this?
I've separately started working on using the resource tree to slice
and dice the memblocks that are candidate for kexec_file_load(), but
I'd like some consensus on whether this is the right way to address
the issue.
Without something like this, kexec_file_load() is not usable on arm64,
so I'm pretty eager to see the back of this bug.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
More information about the kexec
mailing list