savevm: check vmsd for migratability status
Check vmsd for unmigratable field, allowing migratibility status to be modified after vmstate_register. Cc: Juan Quintela <quintela@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
120eee7d1f
commit
7d854c471a
5
savevm.c
5
savevm.c
|
@ -232,7 +232,6 @@ typedef struct SaveStateEntry {
|
||||||
const VMStateDescription *vmsd;
|
const VMStateDescription *vmsd;
|
||||||
void *opaque;
|
void *opaque;
|
||||||
CompatEntry *compat;
|
CompatEntry *compat;
|
||||||
int no_migrate;
|
|
||||||
int is_ram;
|
int is_ram;
|
||||||
} SaveStateEntry;
|
} SaveStateEntry;
|
||||||
|
|
||||||
|
@ -430,7 +429,6 @@ int register_savevm_live(DeviceState *dev,
|
||||||
se->ops = ops;
|
se->ops = ops;
|
||||||
se->opaque = opaque;
|
se->opaque = opaque;
|
||||||
se->vmsd = NULL;
|
se->vmsd = NULL;
|
||||||
se->no_migrate = 0;
|
|
||||||
/* if this is a live_savem then set is_ram */
|
/* if this is a live_savem then set is_ram */
|
||||||
if (ops->save_live_setup != NULL) {
|
if (ops->save_live_setup != NULL) {
|
||||||
se->is_ram = 1;
|
se->is_ram = 1;
|
||||||
|
@ -521,7 +519,6 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
|
||||||
se->opaque = opaque;
|
se->opaque = opaque;
|
||||||
se->vmsd = vmsd;
|
se->vmsd = vmsd;
|
||||||
se->alias_id = alias_id;
|
se->alias_id = alias_id;
|
||||||
se->no_migrate = vmsd->unmigratable;
|
|
||||||
|
|
||||||
if (dev) {
|
if (dev) {
|
||||||
char *id = qdev_get_dev_path(dev);
|
char *id = qdev_get_dev_path(dev);
|
||||||
|
@ -590,7 +587,7 @@ bool qemu_savevm_state_blocked(Error **errp)
|
||||||
SaveStateEntry *se;
|
SaveStateEntry *se;
|
||||||
|
|
||||||
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
QTAILQ_FOREACH(se, &savevm_handlers, entry) {
|
||||||
if (se->no_migrate) {
|
if (se->vmsd && se->vmsd->unmigratable) {
|
||||||
error_setg(errp, "State blocked by non-migratable device '%s'",
|
error_setg(errp, "State blocked by non-migratable device '%s'",
|
||||||
se->idstr);
|
se->idstr);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue