Replace DeviceState dependency with VMStateIf on vmstate API. Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- docs/devel/migration.rst | 2 +- hw/block/onenand.c | 2 +- hw/core/qdev.c | 7 ++++--- hw/ide/cmd646.c | 2 +- hw/ide/isa.c | 2 +- hw/ide/piix.c | 2 +- hw/ide/via.c | 2 +- hw/misc/max111x.c | 2 +- hw/net/eepro100.c | 4 ++-- hw/net/vmxnet3.c | 2 +- hw/nvram/eeprom93xx.c | 4 ++-- hw/ppc/spapr_drc.c | 9 +++++---- hw/ppc/spapr_iommu.c | 4 ++-- hw/s390x/s390-skeys.c | 2 +- include/migration/register.h | 4 ++-- include/migration/vmstate.h | 8 ++++---- migration/savevm.c | 26 +++++++++++++------------- stubs/vmstate.c | 4 ++-- 18 files changed, 45 insertions(+), 43 deletions(-)
diff --git a/docs/devel/migration.rst b/docs/devel/migration.rst index f7668ae389..c9932194d9 100644 --- a/docs/devel/migration.rst +++ b/docs/devel/migration.rst @@ -183,7 +183,7 @@ another to load the state back. .. code:: c - int register_savevm_live(DeviceState *dev, + int register_savevm_live(VMStateIf *obj, const char *idstr, int instance_id, int version_id, diff --git a/hw/block/onenand.c b/hw/block/onenand.c index fcc5a69b90..9c233c12e4 100644 --- a/hw/block/onenand.c +++ b/hw/block/onenand.c @@ -822,7 +822,7 @@ static void onenand_realize(DeviceState *dev, Error **errp) onenand_mem_setup(s); sysbus_init_irq(sbd, &s->intr); sysbus_init_mmio(sbd, &s->container); - vmstate_register(dev, + vmstate_register(VMSTATE_IF(dev), ((s->shift & 0x7f) << 24) | ((s->id.man & 0xff) << 16) | ((s->id.dev & 0xff) << 8) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 7e083dfcae..ad18c0383d 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -849,7 +849,8 @@ static void device_set_realized(Object *obj, bool value, Error **errp) dev->canonical_path = object_get_canonical_path(OBJECT(dev)); if (qdev_get_vmsd(dev)) { - if (vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), dev, + if (vmstate_register_with_alias_id(VMSTATE_IF(dev), + -1, qdev_get_vmsd(dev), dev, dev->instance_id_alias, dev->alias_required_for_version, &local_err) < 0) { @@ -884,7 +885,7 @@ static void device_set_realized(Object *obj, bool value, Error **errp) local_errp); } if (qdev_get_vmsd(dev)) { - vmstate_unregister(dev, qdev_get_vmsd(dev), dev); + vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); } if (dc->unrealize) { local_errp = local_err ? NULL : &local_err; @@ -908,7 +909,7 @@ child_realize_fail: } if (qdev_get_vmsd(dev)) { - vmstate_unregister(dev, qdev_get_vmsd(dev), dev); + vmstate_unregister(VMSTATE_IF(dev), qdev_get_vmsd(dev), dev); } post_realize_fail: diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c index f3ccd11c79..01a982acbc 100644 --- a/hw/ide/cmd646.c +++ b/hw/ide/cmd646.c @@ -301,7 +301,7 @@ static void pci_cmd646_ide_realize(PCIDevice *dev, Error **errp) ide_register_restart_cb(&d->bus[i]); } - vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d); + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d); qemu_register_reset(cmd646_reset, d); } diff --git a/hw/ide/isa.c b/hw/ide/isa.c index 7b6e283679..9c7f88b2d5 100644 --- a/hw/ide/isa.c +++ b/hw/ide/isa.c @@ -75,7 +75,7 @@ static void isa_ide_realizefn(DeviceState *dev, Error **errp) ide_init_ioport(&s->bus, isadev, s->iobase, s->iobase2); isa_init_irq(isadev, &s->irq, s->isairq); ide_init2(&s->bus, s->irq); - vmstate_register(dev, 0, &vmstate_ide_isa, s); + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_isa, s); ide_register_restart_cb(&s->bus); } diff --git a/hw/ide/piix.c b/hw/ide/piix.c index fba6bc8bff..cbaee9e2cc 100644 --- a/hw/ide/piix.c +++ b/hw/ide/piix.c @@ -159,7 +159,7 @@ static void pci_piix_ide_realize(PCIDevice *dev, Error **errp) bmdma_setup_bar(d); pci_register_bar(dev, 4, PCI_BASE_ADDRESS_SPACE_IO, &d->bmdma_bar); - vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d); + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d); pci_piix_init_ports(d); } diff --git a/hw/ide/via.c b/hw/ide/via.c index 7087dc676e..6b9d4c6d78 100644 --- a/hw/ide/via.c +++ b/hw/ide/via.c @@ -193,7 +193,7 @@ static void via_ide_realize(PCIDevice *dev, Error **errp) bmdma_setup_bar(d); pci_register_bar(dev, 4, PCI_BASE_ADDRESS_SPACE_IO, &d->bmdma_bar); - vmstate_register(DEVICE(dev), 0, &vmstate_ide_pci, d); + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d); for (i = 0; i < 2; i++) { ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(d), i, 2); diff --git a/hw/misc/max111x.c b/hw/misc/max111x.c index a713149f16..211008ce02 100644 --- a/hw/misc/max111x.c +++ b/hw/misc/max111x.c @@ -146,7 +146,7 @@ static int max111x_init(SSISlave *d, int inputs) s->input[7] = 0x80; s->com = 0; - vmstate_register(dev, -1, &vmstate_max111x, s); + vmstate_register(VMSTATE_IF(dev), -1, &vmstate_max111x, s); return 0; } diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c index cc2dd8b1c9..cc71a7a036 100644 --- a/hw/net/eepro100.c +++ b/hw/net/eepro100.c @@ -1815,7 +1815,7 @@ static void pci_nic_uninit(PCIDevice *pci_dev) { EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, pci_dev); - vmstate_unregister(&pci_dev->qdev, s->vmstate, s); + vmstate_unregister(VMSTATE_IF(&pci_dev->qdev), s->vmstate, s); g_free(s->vmstate); eeprom93xx_free(&pci_dev->qdev, s->eeprom); qemu_del_nic(s->nic); @@ -1874,7 +1874,7 @@ static void e100_nic_realize(PCIDevice *pci_dev, Error **errp) s->vmstate = g_memdup(&vmstate_eepro100, sizeof(vmstate_eepro100)); s->vmstate->name = qemu_get_queue(s->nic)->model; - vmstate_register(&pci_dev->qdev, -1, s->vmstate, s); + vmstate_register(VMSTATE_IF(&pci_dev->qdev), -1, s->vmstate, s); } static void eepro100_instance_init(Object *obj) diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c index b07adeed9c..8625e93dc9 100644 --- a/hw/net/vmxnet3.c +++ b/hw/net/vmxnet3.c @@ -2247,7 +2247,7 @@ static void vmxnet3_pci_uninit(PCIDevice *pci_dev) VMW_CBPRN("Starting uninit..."); - unregister_savevm(dev, "vmxnet3-msix", s); + unregister_savevm(VMSTATE_IF(dev), "vmxnet3-msix", s); vmxnet3_net_uninit(s); diff --git a/hw/nvram/eeprom93xx.c b/hw/nvram/eeprom93xx.c index 5b01b9b03f..07f09549ed 100644 --- a/hw/nvram/eeprom93xx.c +++ b/hw/nvram/eeprom93xx.c @@ -321,7 +321,7 @@ eeprom_t *eeprom93xx_new(DeviceState *dev, uint16_t nwords) /* Output DO is tristate, read results in 1. */ eeprom->eedo = 1; logout("eeprom = 0x%p, nwords = %u\n", eeprom, nwords); - vmstate_register(dev, 0, &vmstate_eeprom, eeprom); + vmstate_register(VMSTATE_IF(dev), 0, &vmstate_eeprom, eeprom); return eeprom; } @@ -329,7 +329,7 @@ void eeprom93xx_free(DeviceState *dev, eeprom_t *eeprom) { /* Destroy EEPROM. */ logout("eeprom = 0x%p\n", eeprom); - vmstate_unregister(dev, &vmstate_eeprom, eeprom); + vmstate_unregister(VMSTATE_IF(dev), &vmstate_eeprom, eeprom); g_free(eeprom); } diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index 62f1a42592..17aeac3801 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -511,7 +511,7 @@ static void realize(DeviceState *d, Error **errp) error_propagate(errp, err); return; } - vmstate_register(DEVICE(drc), spapr_drc_index(drc), &vmstate_spapr_drc, + vmstate_register(VMSTATE_IF(drc), spapr_drc_index(drc), &vmstate_spapr_drc, drc); trace_spapr_drc_realize_complete(spapr_drc_index(drc)); } @@ -523,7 +523,7 @@ static void unrealize(DeviceState *d, Error **errp) gchar *name; trace_spapr_drc_unrealize(spapr_drc_index(drc)); - vmstate_unregister(DEVICE(drc), &vmstate_spapr_drc, drc); + vmstate_unregister(VMSTATE_IF(drc), &vmstate_spapr_drc, drc); root_container = container_get(object_get_root(), DRC_CONTAINER_PATH); name = g_strdup_printf("%x", spapr_drc_index(drc)); object_property_del(root_container, name, errp); @@ -619,7 +619,8 @@ static void realize_physical(DeviceState *d, Error **errp) return; } - vmstate_register(DEVICE(drcp), spapr_drc_index(SPAPR_DR_CONNECTOR(drcp)), + vmstate_register(VMSTATE_IF(drcp), + spapr_drc_index(SPAPR_DR_CONNECTOR(drcp)), &vmstate_spapr_drc_physical, drcp); qemu_register_reset(drc_physical_reset, drcp); } @@ -635,7 +636,7 @@ static void unrealize_physical(DeviceState *d, Error **errp) return; } - vmstate_unregister(DEVICE(drcp), &vmstate_spapr_drc_physical, drcp); + vmstate_unregister(VMSTATE_IF(drcp), &vmstate_spapr_drc_physical, drcp); qemu_unregister_reset(drc_physical_reset, drcp); } diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c index e87b3d50f7..b9e7854da9 100644 --- a/hw/ppc/spapr_iommu.c +++ b/hw/ppc/spapr_iommu.c @@ -315,7 +315,7 @@ static void spapr_tce_table_realize(DeviceState *dev, Error **errp) QLIST_INSERT_HEAD(&spapr_tce_tables, tcet, list); - vmstate_register(DEVICE(tcet), tcet->liobn, &vmstate_spapr_tce_table, + vmstate_register(VMSTATE_IF(tcet), tcet->liobn, &vmstate_spapr_tce_table, tcet); } @@ -418,7 +418,7 @@ static void spapr_tce_table_unrealize(DeviceState *dev, Error **errp) { SpaprTceTable *tcet = SPAPR_TCE_TABLE(dev); - vmstate_unregister(DEVICE(tcet), &vmstate_spapr_tce_table, tcet); + vmstate_unregister(VMSTATE_IF(tcet), &vmstate_spapr_tce_table, tcet); QLIST_REMOVE(tcet, list); diff --git a/hw/s390x/s390-skeys.c b/hw/s390x/s390-skeys.c index d4807f7777..16b9bbf04d 100644 --- a/hw/s390x/s390-skeys.c +++ b/hw/s390x/s390-skeys.c @@ -392,7 +392,7 @@ static inline void s390_skeys_set_migration_enabled(Object *obj, bool value, register_savevm_live(NULL, TYPE_S390_SKEYS, 0, 1, &savevm_s390_storage_keys, ss); } else { - unregister_savevm(DEVICE(ss), TYPE_S390_SKEYS, ss); + unregister_savevm(VMSTATE_IF(ss), TYPE_S390_SKEYS, ss); } } diff --git a/include/migration/register.h b/include/migration/register.h index 74f1578b29..f22f180286 100644 --- a/include/migration/register.h +++ b/include/migration/register.h @@ -70,13 +70,13 @@ typedef struct SaveVMHandlers { int (*resume_prepare)(MigrationState *s, void *opaque); } SaveVMHandlers; -int register_savevm_live(DeviceState *dev, +int register_savevm_live(VMStateIf *obj, const char *idstr, int instance_id, int version_id, const SaveVMHandlers *ops, void *opaque); -void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque); +void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque); #endif diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index bdcf8a1652..1911e37d72 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -1116,22 +1116,22 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, bool vmstate_save_needed(const VMStateDescription *vmsd, void *opaque); /* Returns: 0 on success, -1 on failure */ -int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, +int vmstate_register_with_alias_id(VMStateIf *obj, int instance_id, const VMStateDescription *vmsd, void *base, int alias_id, int required_for_version, Error **errp); /* Returns: 0 on success, -1 on failure */ -static inline int vmstate_register(DeviceState *dev, int instance_id, +static inline int vmstate_register(VMStateIf *obj, int instance_id, const VMStateDescription *vmsd, void *opaque) { - return vmstate_register_with_alias_id(dev, instance_id, vmsd, + return vmstate_register_with_alias_id(obj, instance_id, vmsd, opaque, -1, 0, NULL); } -void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, +void vmstate_unregister(VMStateIf *obj, const VMStateDescription *vmsd, void *opaque); struct MemoryRegion; diff --git a/migration/savevm.c b/migration/savevm.c index 6caa35a679..7902da16e6 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -684,7 +684,7 @@ static void savevm_state_handler_insert(SaveStateEntry *nse) of the system, so instance_id should be removed/replaced. Meanwhile pass -1 as instance_id if you do not already have a clearly distinguishing id for all instances of your device class. */ -int register_savevm_live(DeviceState *dev, +int register_savevm_live(VMStateIf *obj, const char *idstr, int instance_id, int version_id, @@ -704,8 +704,8 @@ int register_savevm_live(DeviceState *dev, se->is_ram = 1; } - if (dev) { - char *id = qdev_get_dev_path(dev); + if (obj) { + char *id = vmstate_if_get_id(obj); if (id) { if (snprintf(se->idstr, sizeof(se->idstr), "%s/", id) >= sizeof(se->idstr)) { @@ -736,17 +736,17 @@ int register_savevm_live(DeviceState *dev, return 0; } -void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque) +void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque) { SaveStateEntry *se, *new_se; char id[256] = ""; - if (dev) { - char *path = qdev_get_dev_path(dev); - if (path) { - pstrcpy(id, sizeof(id), path); + if (obj) { + char *oid = vmstate_if_get_id(obj); + if (oid) { + pstrcpy(id, sizeof(id), oid); pstrcat(id, sizeof(id), "/"); - g_free(path); + g_free(oid); } } pstrcat(id, sizeof(id), idstr); @@ -760,7 +760,7 @@ void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque) } } -int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, +int vmstate_register_with_alias_id(VMStateIf *obj, int instance_id, const VMStateDescription *vmsd, void *opaque, int alias_id, int required_for_version, @@ -778,8 +778,8 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, se->vmsd = vmsd; se->alias_id = alias_id; - if (dev) { - char *id = qdev_get_dev_path(dev); + if (obj) { + char *id = vmstate_if_get_id(obj); if (id) { if (snprintf(se->idstr, sizeof(se->idstr), "%s/", id) >= sizeof(se->idstr)) { @@ -810,7 +810,7 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, return 0; } -void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, +void vmstate_unregister(VMStateIf *obj, const VMStateDescription *vmsd, void *opaque) { SaveStateEntry *se, *new_se; diff --git a/stubs/vmstate.c b/stubs/vmstate.c index e1e89b87f0..6951d9fdc5 100644 --- a/stubs/vmstate.c +++ b/stubs/vmstate.c @@ -3,7 +3,7 @@ const VMStateDescription vmstate_dummy = {}; -int vmstate_register_with_alias_id(DeviceState *dev, +int vmstate_register_with_alias_id(VMStateIf *obj, int instance_id, const VMStateDescription *vmsd, void *base, int alias_id, @@ -13,7 +13,7 @@ int vmstate_register_with_alias_id(DeviceState *dev, return 0; } -void vmstate_unregister(DeviceState *dev, +void vmstate_unregister(VMStateIf *obj, const VMStateDescription *vmsd, void *opaque) { -- 2.23.0