hw/s390x/s390-stattrib: Don't call register_savevm_live() during instance_init()
We must not call register_savevm_live() from an instance_init() function (since this could be called multiple times during device introspection). Move this to the realize() function instead. Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Eric Farman <farman@linux.ibm.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231020150554.664422-4-thuth@redhat.com>
This commit is contained in:
parent
bc1bf2ae2f
commit
832685707f
@ -331,6 +331,17 @@ static const TypeInfo qemu_s390_stattrib_info = {
|
||||
|
||||
/* Generic abstract object: */
|
||||
|
||||
static SaveVMHandlers savevm_s390_stattrib_handlers = {
|
||||
.save_setup = cmma_save_setup,
|
||||
.save_live_iterate = cmma_save_iterate,
|
||||
.save_live_complete_precopy = cmma_save_complete,
|
||||
.state_pending_exact = cmma_state_pending,
|
||||
.state_pending_estimate = cmma_state_pending,
|
||||
.save_cleanup = cmma_save_cleanup,
|
||||
.load_state = cmma_load,
|
||||
.is_active = cmma_active,
|
||||
};
|
||||
|
||||
static void s390_stattrib_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
bool ambiguous = false;
|
||||
@ -338,7 +349,11 @@ static void s390_stattrib_realize(DeviceState *dev, Error **errp)
|
||||
object_resolve_path_type("", TYPE_S390_STATTRIB, &ambiguous);
|
||||
if (ambiguous) {
|
||||
error_setg(errp, "storage_attributes device already exists");
|
||||
return;
|
||||
}
|
||||
|
||||
register_savevm_live(TYPE_S390_STATTRIB, 0, 0,
|
||||
&savevm_s390_stattrib_handlers, dev);
|
||||
}
|
||||
|
||||
static Property s390_stattrib_props[] = {
|
||||
@ -356,24 +371,10 @@ static void s390_stattrib_class_init(ObjectClass *oc, void *data)
|
||||
device_class_set_props(dc, s390_stattrib_props);
|
||||
}
|
||||
|
||||
static SaveVMHandlers savevm_s390_stattrib_handlers = {
|
||||
.save_setup = cmma_save_setup,
|
||||
.save_live_iterate = cmma_save_iterate,
|
||||
.save_live_complete_precopy = cmma_save_complete,
|
||||
.state_pending_exact = cmma_state_pending,
|
||||
.state_pending_estimate = cmma_state_pending,
|
||||
.save_cleanup = cmma_save_cleanup,
|
||||
.load_state = cmma_load,
|
||||
.is_active = cmma_active,
|
||||
};
|
||||
|
||||
static void s390_stattrib_instance_init(Object *obj)
|
||||
{
|
||||
S390StAttribState *sas = S390_STATTRIB(obj);
|
||||
|
||||
register_savevm_live(TYPE_S390_STATTRIB, 0, 0,
|
||||
&savevm_s390_stattrib_handlers, sas);
|
||||
|
||||
sas->migration_cur_gfn = 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user