[PATCH 1/3] kexec: Prevent removal of memory in use by a loaded kexec image
Baoquan He
bhe at redhat.com
Fri Apr 17 00:02:47 AEST 2020
On 04/16/20 at 03:31pm, David Hildenbrand wrote:
> > Not sure if I get the notifier idea clearly. If you mean
> >
> > 1) Add a common function to pick memory in unmovable zone;
>
> Not strictly required IMHO. But, minor detail.
>
> > 2) Let DLPAR, balloon register with notifier;
>
> Yeah, or virtio-mem, or any other technology that adds/removes memory
> dynamically.
>
> > 3) In the common function, ask notified part to check if the picked
> > unmovable memory is available for locating kexec kernel;
>
> Yeah.
These may not be needed, please see below comment.
>
> >
> > Sounds doable to me, and not complicated.
> >
> >> images. It would apply to
> >>
> >> - arm64 and filter out all hotadded memory (IIRC, only boot memory can
> >> be used).
> >
> > Do you mean hot added memory after boot can't be recognized and added
> > into system RAM on arm64?
>
> See patch #3 of this patch set, which wants to avoid placing kexec
> binaries on hotplugged memory. But I have no idea what the current plan
> regarding arm64 is (this thread exploded :) ).
>
> I would assume that we don't want to place kexec images on any
> hotplugged (or rather: hot(un)pluggable) memory - on any architecture.
Yes, noticed that and James replied to DaveY.
Later, when I was considering to make a draft patch to do the picking of
memory from normal zone, and add a notifier, as we discussed at above, I
suddenly realized that kexec_file_load doesn't have this issue. It
traverse system RAM bottom up to get an available region to put
kernel/initrd/boot_param, etc. I can't think of a system where its
low memory could be unavailable.
>
> >
> >
> >> - powerpc to filter out all LMBs that can be removed (assuming not all
> >> memory corresponds to LMBs that can be removed, otherwise we're in
> >> trouble ... :) )
> >> - virtio-mem to filter out all memory it added.
> >> - hyper-v to filter out partially backed memory blocks (esp. the last
> >> memory block it added and only partially backed it by memory).
> >>
> >> This would make it work for kexec_file_load(), however, I do wonder how
> >> we would want to approach that from userspace kexec-tools when handling
> >> it from kexec_load().
> >
> > Let's make kexec_file_load work firstly. Since this work is only first
> > step to make kexec-ed kernel not break memory hotplug. After kexec
> > rebooting, the KASLR may locate kernel into hotpluggable area too.
>
> Can you elaborate how that would work?
Well, boot memory can be hotplugged or not after boot, they are marked
in uefi tables, the current kexec doesn't save and pass them into 2nd
kenrel, when kexec kernel bootup, it need read them and avoid them to
randomize kernel into.
More information about the Linuxppc-dev
mailing list