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


Reply via email to