Changelog: since v1: - include 4.2 machines patch for adding compat RAM layout on top - 2/4 add missing in v1 patch for splitting too big MemorySection on several memslots - 3/4 amend code path on alias destruction to ensure that RAMBlock is cleaned properly - 4/4 add compat machine code to keep old layout (migration-wise) for 4.1 and older machines
While looking into unifying guest RAM allocation to use hostmem backends for initial RAM (especially when -mempath is used) and retiring memory_region_allocate_system_memory() API, leaving only single hostmem backend, I was inspecting how currently it is used by boards and it turns out several boards abuse it by calling the function several times (despite documented contract forbiding it). s390 is one of such boards where KVM limitation on memslot size got propagated to board design and memory_region_allocate_system_memory() was abused to satisfy KVM requirement for max RAM chunk where memory region alias would suffice. Unfortunately, memory_region_allocate_system_memory() usage created migration dependency where guest RAM is transferred in migration stream as several RAMBlocks if it's more than KVM_SLOT_MAX_BYTES. In order to replace these several RAM chunks with a single memdev and keep it working with KVM memslot size limit and migration compatible, following was done: * [2/4] split too big RAM chunk inside of KVM code on several memory slots if necessary * [4/4] use memory region aliases to partition hostmem backend RAM on KVM_SLOT_MAX_BYTES chunks, which should keep KVM side working * [3/4] hacked memory region aliases (to ram memory regions only) to have its own RAMBlocks pointing to RAM chunks owned by aliased memory region. While it's admittedly a hack, but it's relatively simple and allows board code re-shape migration stream as necessary I haven't tried to use migratable aliases on x86 machines, but with it it could be possible to drop legacy RAM allocation and compat knob (cd5ff8333a) dropping '-numa node,mem' completely even for old machines. PS: Tested with ping pong cross version migration on s390 machine and x86 pc/q35 (with reduced KVM_SLOT_MAX_BYTES since I don't have access to large enough host) CC: pbonz...@redhat.com CC: qemu-s3...@nongnu.org CC: borntrae...@de.ibm.com CC: th...@redhat.com CC: da...@redhat.com CC: coh...@redhat.com Cornelia Huck (1): hw: add compat machines for 4.2 Igor Mammedov (3): kvm: s390: split too big memory section on several memslots memory: make MemoryRegion alias migratable s390: do not call memory_region_allocate_system_memory() multiple times include/hw/boards.h | 3 ++ include/hw/i386/pc.h | 3 ++ include/hw/s390x/s390-virtio-ccw.h | 14 ++++++ include/sysemu/kvm_int.h | 1 + accel/kvm/kvm-all.c | 77 +++++++++++++++++------------ exec.c | 9 ++-- hw/arm/virt.c | 9 +++- hw/core/machine.c | 3 ++ hw/i386/pc.c | 3 ++ hw/i386/pc_piix.c | 14 +++++- hw/i386/pc_q35.c | 13 ++++- hw/ppc/spapr.c | 15 +++++- hw/s390x/s390-virtio-ccw.c | 79 ++++++++++++++++++++---------- memory.c | 6 +++ target/s390x/kvm.c | 1 + 15 files changed, 183 insertions(+), 67 deletions(-) -- 2.18.1