diff options
author | Juan Quintela <quintela@redhat.com> | 2012-06-27 10:59:15 +0200 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2012-07-20 08:19:27 +0200 |
commit | 6bd68781331590c4f2fbd1fdf98e80d7f6588b31 (patch) | |
tree | ae53eee26d30deae6d3ed0ca84b559d0b2819265 | |
parent | 9b5bfab05f7c2a56d5908117e8cc62015e6b2c63 (diff) |
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>
-rw-r--r-- | block-migration.c | 13 | ||||
-rw-r--r-- | savevm.c | 15 | ||||
-rw-r--r-- | vmstate.h | 1 |
3 files changed, 22 insertions, 7 deletions
diff --git a/block-migration.c b/block-migration.c index cd8a8dd6cb..6d37dc157c 100644 --- a/block-migration.c +++ b/block-migration.c @@ -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", 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) { 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; } +static bool block_is_active(void *opaque) +{ + return block_mig_state.blk_enable == 1; +} + SaveVMHandlers savevm_block_handlers = { .set_params = block_set_params, .save_live_state = block_save_live, .load_state = block_load, .cancel = block_migration_cancel, + .is_active = block_is_active, }; void blk_mig_init(void) @@ -1576,6 +1576,11 @@ int qemu_savevm_state_begin(QEMUFile *f, if (!se->ops || !se->ops->save_live_state) { continue; } + if (se->ops && se->ops->is_active) { + if (!se->ops->is_active(se->opaque)) { + continue; + } + } /* Section type */ qemu_put_byte(f, QEMU_VM_SECTION_START); 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) { continue; } + if (se->ops && se->ops->is_active) { + if (!se->ops->is_active(se->opaque)) { + continue; + } + } if (qemu_file_rate_limit(f)) { return 0; } @@ -1658,6 +1668,11 @@ int qemu_savevm_state_complete(QEMUFile *f) if (!se->ops || !se->ops->save_live_state) { continue; } + if (se->ops && se->ops->is_active) { + if (!se->ops->is_active(se->opaque)) { + continue; + } + } trace_savevm_section_start(); /* Section type */ 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); void (*cancel)(void *opaque); LoadStateHandler *load_state; + bool (*is_active)(void *opaque); } SaveVMHandlers; int register_savevm(DeviceState *dev, |