I was thinking of making KVM VMs with assigned PCI devices
unsavable/unmigratable, but I wasn't thrilled with the
no_migrate solutions. The more generic solutions seems to be
simply letting save handlers return an error if the device can't
be migrated. This is also much more generic than a one-way
bit flip of the no_migrate flag. For a vmsd based registration,
the pre_save() routine seems to be the right place to allow
devices to abort. The series also carries the error back through
all the vmstate callers. If this looks good, I'll give it some
more testing and submit as non-RFC. Thanks,
Alex
---
Alex Williamson (5):
virtio: Allow virtio_save() errors
pci: Allow pci_device_save() to return error
savevm: Allow vmsd->pre_save to return error
savevm: Remove register_device_unmigratable()
savevm: Allow SaveStateHandler() to return error
hw/adb.c | 8 ++++-
hw/ads7846.c | 4 ++-
hw/arm_gic.c | 4 ++-
hw/arm_timer.c | 6 +++-
hw/armv7m_nvic.c | 4 ++-
hw/cuda.c | 4 ++-
hw/fdc.c | 3 +-
hw/g364fb.c | 4 ++-
hw/grackle_pci.c | 4 +--
hw/gt64xxx.c | 4 +--
hw/heathrow_pic.c | 4 ++-
hw/hpet.c | 3 +-
hw/hw.h | 10 +++---
hw/i2c.c | 3 +-
hw/ide/core.c | 4 ++-
hw/ivshmem.c | 17 +++++++----
hw/lsi53c895a.c | 4 ++-
hw/m48t59.c | 4 ++-
hw/mac_dbdma.c | 4 ++-
hw/mac_nvram.c | 4 ++-
hw/max111x.c | 4 ++-
hw/mipsnet.c | 4 ++-
hw/mst_fpga.c | 3 +-
hw/nand.c | 3 +-
hw/openpic.c | 4 +--
hw/pci.c | 8 ++++-
hw/pci.h | 2 +
hw/piix4.c | 4 +--
hw/pl011.c | 4 ++-
hw/pl022.c | 4 ++-
hw/pl061.c | 4 ++-
hw/ppc4xx_pci.c | 10 ++++--
hw/ppce500_pci.c | 10 ++++--
hw/pxa2xx.c | 28 +++++++++++++-----
hw/pxa2xx_dma.c | 4 ++-
hw/pxa2xx_gpio.c | 4 ++-
hw/pxa2xx_keypad.c | 3 +-
hw/pxa2xx_lcd.c | 4 ++-
hw/pxa2xx_mmci.c | 4 ++-
hw/pxa2xx_pic.c | 4 ++-
hw/pxa2xx_timer.c | 4 ++-
hw/rc4030.c | 4 ++-
hw/rtl8139.c | 4 ++-
hw/serial.c | 3 +-
hw/spitz.c | 14 ++++++---
hw/ssd0323.c | 4 ++-
hw/ssi-sd.c | 4 ++-
hw/stellaris.c | 20 ++++++++++---
hw/stellaris_enet.c | 4 ++-
hw/stellaris_input.c | 4 ++-
hw/syborg_fb.c | 4 ++-
hw/syborg_interrupt.c | 3 +-
hw/syborg_keyboard.c | 3 +-
hw/syborg_pointer.c | 3 +-
hw/syborg_rtc.c | 4 ++-
hw/syborg_serial.c | 4 ++-
hw/syborg_timer.c | 4 ++-
hw/tsc2005.c | 4 ++-
hw/tsc210x.c | 4 ++-
hw/twl92230.c | 3 +-
hw/unin_pci.c | 4 +--
hw/usb-uhci.c | 3 +-
hw/virtio-balloon.c | 8 ++++-
hw/virtio-blk.c | 9 ++++--
hw/virtio-net.c | 9 ++++--
hw/virtio-pci.c | 9 ++++--
hw/virtio-serial-bus.c | 9 ++++--
hw/virtio.c | 13 ++++++--
hw/virtio.h | 4 +--
hw/wm8750.c | 3 +-
hw/zaurus.c | 4 ++-
qemu-common.h | 2 +
savevm.c | 67 +++++++++++++------------------------------
slirp/slirp.c | 6 +++-
target-arm/machine.c | 3 +-
target-cris/machine.c | 3 +-
target-i386/machine.c | 7 +++-
target-microblaze/machine.c | 3 +-
target-mips/machine.c | 3 +-
target-ppc/machine.c | 3 +-
target-s390x/machine.c | 3 +-
target-sparc/machine.c | 3 +-
82 files changed, 322 insertions(+), 174 deletions(-)