On Wed, Jul 15, 2020 at 01:42:02PM +0200, David Hildenbrand wrote: > > So, are you saying that even at IPL time there might already be memory > > devices attached to the system? And the kernel should _not_ treat them > > as normal memory? > > Sorry if that was unclear. Yes, we can have such devices (including > memory areas) on a cold boot/reboot/kexec. In addition, they might pop > up at runtime (e.g., hotplugging a virtio-mem device). The device is in > charge of exposing that area and deciding what to do with it. > > The kernel should never treat them as normal memory (IOW, system RAM). > Not during a cold boot, not during a reboot. The device driver is > responsible for deciding how to use that memory (e.g., add it as system > RAM), and which parts of that memory are actually valid to be used (even > if a tprot might succeed it might not be valid to use just yet - I guess > somewhat similar to doing a tport on a dcss area - AFAIK, you also don't > want to use it like normal memory). > > E.g., on x86-64, memory exposed via virtio-mem or virtio-pmem is never > exposed via the e820 map. The only trace that there might be *something* > now/in the future is indicated via ACPI SRAT tables. This takes > currently care of indicating the maximum possible PFN.
Ok, but all of this needa to be documented somewhere. This raises a couple of questions to me: What happens on - IPL Clear with this special memory? Will it be detached/away afterwards? - IPL Normal? "Obviously" it must stay otherwise kdump would never see that memory. And when you write it's up to the device driver what to with that memory: is there any documentation available what all of this is good for? I would assume _most likely_ this extra memory is going to be added to ZONE_MOVABLE _somehow_ so that it can be taken away also. But since it is not normal memory, like you say, I'm wondering how that is supposed to work. As far as I can tell there would be a lot of inconsistencies in userspace interfaces which provide memory / zone information. Or I'm not getting the point of all of this at all. So please provide more information, or a pointer to documentation.