mirror of https://github.com/xqemu/xqemu.git
savevm: introduce is_active method
Enable the creation of a method to tell migration if that section is active and should be migrate. We use it for blk-migration, that is normally not active. We don't create the method for RAM, as setups without RAM are very strange O:-) Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
9b5bfab05f
commit
6bd6878133
|
@ -548,13 +548,6 @@ static int block_save_live(QEMUFile *f, int stage, void *opaque)
|
||||||
DPRINTF("Enter save live stage %d submitted %d transferred %d\n",
|
DPRINTF("Enter save live stage %d submitted %d transferred %d\n",
|
||||||
stage, block_mig_state.submitted, block_mig_state.transferred);
|
stage, block_mig_state.submitted, block_mig_state.transferred);
|
||||||
|
|
||||||
|
|
||||||
if (block_mig_state.blk_enable != 1) {
|
|
||||||
/* no need to migrate storage */
|
|
||||||
qemu_put_be64(f, BLK_MIG_FLAG_EOS);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stage == 1) {
|
if (stage == 1) {
|
||||||
init_blk_migration(f);
|
init_blk_migration(f);
|
||||||
|
|
||||||
|
@ -710,11 +703,17 @@ static void block_set_params(const MigrationParams *params, void *opaque)
|
||||||
block_mig_state.blk_enable |= params->shared;
|
block_mig_state.blk_enable |= params->shared;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool block_is_active(void *opaque)
|
||||||
|
{
|
||||||
|
return block_mig_state.blk_enable == 1;
|
||||||
|
}
|
||||||
|
|
||||||
SaveVMHandlers savevm_block_handlers = {
|
SaveVMHandlers savevm_block_handlers = {
|
||||||
.set_params = block_set_params,
|
.set_params = block_set_params,
|
||||||
.save_live_state = block_save_live,
|
.save_live_state = block_save_live,
|
||||||
.load_state = block_load,
|
.load_state = block_load,
|
||||||
.cancel = block_migration_cancel,
|
.cancel = block_migration_cancel,
|
||||||
|
.is_active = block_is_active,
|
||||||
};
|
};
|
||||||
|
|
||||||
void blk_mig_init(void)
|
void blk_mig_init(void)
|
||||||
|
|
15
savevm.c
15
savevm.c
|
@ -1576,6 +1576,11 @@ int qemu_savevm_state_begin(QEMUFile *f,
|
||||||
if (!se->ops || !se->ops->save_live_state) {
|
if (!se->ops || !se->ops->save_live_state) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (se->ops && se->ops->is_active) {
|
||||||
|
if (!se->ops->is_active(se->opaque)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
/* Section type */
|
/* Section type */
|
||||||
qemu_put_byte(f, QEMU_VM_SECTION_START);
|
qemu_put_byte(f, QEMU_VM_SECTION_START);
|
||||||
qemu_put_be32(f, se->section_id);
|
qemu_put_be32(f, se->section_id);
|
||||||
|
@ -1618,6 +1623,11 @@ int qemu_savevm_state_iterate(QEMUFile *f)
|
||||||
if (!se->ops || !se->ops->save_live_state) {
|
if (!se->ops || !se->ops->save_live_state) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (se->ops && se->ops->is_active) {
|
||||||
|
if (!se->ops->is_active(se->opaque)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (qemu_file_rate_limit(f)) {
|
if (qemu_file_rate_limit(f)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1658,6 +1668,11 @@ int qemu_savevm_state_complete(QEMUFile *f)
|
||||||
if (!se->ops || !se->ops->save_live_state) {
|
if (!se->ops || !se->ops->save_live_state) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (se->ops && se->ops->is_active) {
|
||||||
|
if (!se->ops->is_active(se->opaque)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
trace_savevm_section_start();
|
trace_savevm_section_start();
|
||||||
/* Section type */
|
/* Section type */
|
||||||
qemu_put_byte(f, QEMU_VM_SECTION_END);
|
qemu_put_byte(f, QEMU_VM_SECTION_END);
|
||||||
|
|
|
@ -35,6 +35,7 @@ typedef struct SaveVMHandlers {
|
||||||
int (*save_live_state)(QEMUFile *f, int stage, void *opaque);
|
int (*save_live_state)(QEMUFile *f, int stage, void *opaque);
|
||||||
void (*cancel)(void *opaque);
|
void (*cancel)(void *opaque);
|
||||||
LoadStateHandler *load_state;
|
LoadStateHandler *load_state;
|
||||||
|
bool (*is_active)(void *opaque);
|
||||||
} SaveVMHandlers;
|
} SaveVMHandlers;
|
||||||
|
|
||||||
int register_savevm(DeviceState *dev,
|
int register_savevm(DeviceState *dev,
|
||||||
|
|
Loading…
Reference in New Issue