On 30.04.20 18:33, Eric W. Biederman wrote:
David Hildenbrand <david(a)redhat.com> writes:
> On 30.04.20 17:38, Eric W. Biederman wrote:
>> David Hildenbrand <david(a)redhat.com> writes:
>>> Some devices/drivers that add memory via add_memory() and friends (e.g.,
>>> dax/kmem, but also virtio-mem in the future) don't want to create
>>> in /sys/firmware/memmap/ - primarily to hinder kexec from adding this
>>> memory to the boot memmap of the kexec kernel.
>>> In fact, such memory is never exposed via the firmware memmap as System
>>> RAM (e.g., e820), so exposing this memory via /sys/firmware/memmap/ is
>>> "kexec needs the raw firmware-provided memory map to setup the
>>> parameter segment of the kernel that should be booted with
>>> kexec. Also, the raw memory map is useful for debugging. For
>>> that reason, /sys/firmware/memmap is an interface that provides
>>> the raw memory map to userspace." 
>>> We don't have to worry about firmware_map_remove() on the removal path.
>>> If there is no entry, it will simply return with -EINVAL.
>> You know what this justification is rubbish, and I have previously
>> explained why it is rubbish.
> Actually, no, I don't think it is rubbish. See patch #3 and the cover
> letter why this is the right thing to do *for special memory*, *not
> ordinary DIMMs*.
> And to be quite honest, I think your response is a little harsh. I don't
> recall you replying to my virtio-mem-related comments.
>> Nacked-by: "Eric W. Biederman" <ebiederm(a)xmission.com>
>> This needs to be based on weather the added memory is ultimately normal
>> ram or is something special.
> Yes, that's what the caller are expected to decide, see patch #3.
> kexec should try to be as closely as possible to a real reboot - IMHO.
That is very fuzzy in terms of hotplug memory. The kexec'd kernel
should see the hotplugged memory assuming it is ordinary memory.
But kexec is not a reboot although it is quite similar. Kexec is
swapping one running kernel and it's state for another kernel without
I agree (especially regarding the arm64 DIMM hotplug discussion).
However, for the two cases
We really want to let the driver take back control and figure out "what
to do with the memory".
>> Justifying behavior by documentation that does not consider memory
>> hotplug is bad thinking.
> Are you maybe confusing this patch series with the arm64 approach? This
> is not about ordinary hotplugged DIMMs.
I think I am.
My challenge is that I don't see anything in the description that says
this isn't about ordinary hotplugged DIMMs. All I saw was hotplug
I'm sorry if that was confusing, I tried to stress that kmem and
virtio-mem is special in the description.
I squeezed a lot of that information into the cover letter and into
If the class of memory is different then please by all means let's mark
it differently in struct resource so everyone knows it is different.
But that difference needs to be more than hotplug.
That difference needs to be the hypervisor loaned us memory and might
take it back at any time, or this memory is persistent and so it has
these different characteristics so don't use it as ordinary ram.
Yes, and I think kmem took an excellent approach of explicitly putting
that "System RAM" into a resource hierarchy. That "System RAM"
show up as a root node under /proc/iomem (see patch #3), which already
results in kexec-tools to treat it in a special way. I am thinking about
doing the same for virtio-mem.
That information is also useful to other people looking at the system
and seeing what is going on.
Just please don't muddle the concepts, or assume that whatever subset of
hotplug memory you are dealing with is the only subset.
I can certainly rephrase the subject/description/comment, stating that
this is not to be used for ordinary hotplugged DIMMs - only when the
device driver is under control to decide what to do with that memory -
especially when kexec'ing.
(previously, I called this flag MHP_DRIVER_MANAGED, but I think
MHP_NO_FIRMWARE_MEMMAP is clearer, we just need a better description)
Would that make it clearer?
David / dhildenb