On Wed, Jun 07, 2017 at 07:17:17PM +0200, Greg Kurz wrote: > The ICPState objects are currently registered to vmstate as qdev objects. > Their instance ids are hence computed automatically in the migration code, > and thus depends on the order the CPU cores were plugged. > > If the destination had its CPU cores plugged in a different order than the > source, then ICPState objects will have different instance_ids and load > the wrong state. > > Since CPU objects have a reliable cpu_index which is already used as > instance_id in vmstate, let's use it for ICPState as well. > > Signed-off-by: Greg Kurz <gr...@kaod.org> > --- > hw/intc/xics.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-)
So, this is definitely a good idea w.r.t. future compatibility. But, won't it break migration compat as a once off, since the devices will be found under their new id instead of the qdev id? > > diff --git a/hw/intc/xics.c b/hw/intc/xics.c > index 330441ff7fe8..3d76b43876c5 100644 > --- a/hw/intc/xics.c > +++ b/hw/intc/xics.c > @@ -348,10 +348,14 @@ static void icp_realize(DeviceState *dev, Error **errp) > } > > qemu_register_reset(icp_reset, dev); > + vmstate_register(NULL, icp->cs->cpu_index, &vmstate_icp_server, icp); > } > > static void icp_unrealize(DeviceState *dev, Error **errp) > { > + ICPState *icp = ICP(dev); > + > + vmstate_unregister(NULL, &vmstate_icp_server, icp); > qemu_unregister_reset(icp_reset, dev); > } > > @@ -359,7 +363,6 @@ static void icp_class_init(ObjectClass *klass, void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > > - dc->vmsd = &vmstate_icp_server; > dc->realize = icp_realize; > dc->unrealize = icp_unrealize; > } > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature