Skip to content
  • Paolo Bonzini's avatar
    pc: hack for migration compatibility from QEMU 2.0 · 07fb6176
    Paolo Bonzini authored
    
    
    Changing the ACPI table size causes migration to break, and the memory
    hotplug work opened our eyes on how horribly we were breaking things in
    2.0 already.
    
    The ACPI table size is rounded to the next 4k, which one would think
    gives some headroom.  In practice this is not the case, because the user
    can control the ACPI table size (each CPU adds 97 bytes to the SSDT and
    8 to the MADT) and so some "-smp" values will break the 4k boundary and
    fail to migrate.  Similarly, PCI bridges add ~1870 bytes to the SSDT.
    
    This patch concerns itself with fixing migration from QEMU 2.0.  It
    computes the payload size of QEMU 2.0 and always uses that one.
    The previous patch shrunk the ACPI tables enough that the QEMU 2.0 size
    should always be enough; non-AML tables can change depending on the
    configuration (especially MADT, SRAT, HPET) but they remain the same
    between QEMU 2.0 and 2.1, so we only compute our padding based on the
    sizes of the SSDT and DSDT.
    
    Migration from QEMU 1.7 should work for guests that have a number of CPUs
    other than 12, 13, 14, 54, 55, 56, 97, 98, 139, 140.  It was already
    broken from QEMU 1.7 to QEMU 2.0 in the same way, though.
    
    Even with this patch, QEMU 1.7 and 2.0 have two different ideas of
    "-M pc-i440fx-2.0" when there are PCI bridges.  Igor sent a patch to
    adopt the QEMU 1.7 definition.  I think distributions should apply
    it if they move directly from QEMU 1.7 to 2.1+ without ever packaging
    version 2.0.
    
    Reviewed-by: default avatarLaszlo Ersek <lersek@redhat.com>
    Tested-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    07fb6176