Today we use vmstate_register() to register the vmstate of logical DRCs during drc_realize(), following it up with a similar vmstate_unregister() during drc_unrealize().
We can instead use qdev to init the vmstate of the device via the dc->vmsd interface. This will spare us of both vmstate calls and make the code a little more maintainable. Since we're using spapr_drc_index() as instance_id in vmstate_register(), we'll need to use qdev_set_legacy_instance_id() to set the same instance_id the DRC vmstates are now used to have. Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com> --- hw/ppc/spapr_drc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index 76bc5d42a0..a5ef64d2a2 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -536,8 +536,7 @@ static void drc_realize(DeviceState *d, Error **errp) trace_spapr_drc_realize_child(spapr_drc_index(drc), child_name); object_property_add_alias(root_container, link_name, drc->owner, child_name); - vmstate_register(VMSTATE_IF(drc), spapr_drc_index(drc), &vmstate_spapr_drc, - drc); + qdev_set_legacy_instance_id(d, spapr_drc_index(drc), 1); trace_spapr_drc_realize_complete(spapr_drc_index(drc)); } @@ -548,7 +547,6 @@ static void drc_unrealize(DeviceState *d) Object *root_container; trace_spapr_drc_unrealize(spapr_drc_index(drc)); - vmstate_unregister(VMSTATE_IF(drc), &vmstate_spapr_drc, drc); root_container = container_get(object_get_root(), DRC_CONTAINER_PATH); object_property_del(root_container, name); } @@ -673,8 +671,11 @@ static void spapr_drc_physical_class_init(ObjectClass *k, void *data) static void spapr_drc_logical_class_init(ObjectClass *k, void *data) { + DeviceClass *dk = DEVICE_CLASS(k); SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_CLASS(k); + dk->vmsd = &vmstate_spapr_drc; + drck->dr_entity_sense = logical_entity_sense; drck->isolate = drc_isolate_logical; drck->unisolate = drc_unisolate_logical; -- 2.35.1