提交 5727309d 编写于 作者: J Juan Quintela

migration: Remove MigrationState from migration_in_postcopy

We need to call for the migrate_get_current() in more that half of the
uses, so call that inside.
Signed-off-by: NJuan Quintela <quintela@redhat.com>
Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: NPeter Xu <peterx@redhat.com>
上级 6d358d94
...@@ -238,7 +238,7 @@ bool migration_is_idle(MigrationState *s); ...@@ -238,7 +238,7 @@ bool migration_is_idle(MigrationState *s);
bool migration_has_finished(MigrationState *); bool migration_has_finished(MigrationState *);
bool migration_has_failed(MigrationState *); bool migration_has_failed(MigrationState *);
/* True if outgoing migration has entered postcopy phase */ /* True if outgoing migration has entered postcopy phase */
bool migration_in_postcopy(MigrationState *); bool migration_in_postcopy(void);
/* ...and after the device transmission */ /* ...and after the device transmission */
bool migration_in_postcopy_after_devices(MigrationState *); bool migration_in_postcopy_after_devices(MigrationState *);
MigrationState *migrate_get_current(void); MigrationState *migrate_get_current(void);
......
...@@ -1062,14 +1062,16 @@ bool migration_has_failed(MigrationState *s) ...@@ -1062,14 +1062,16 @@ bool migration_has_failed(MigrationState *s)
s->state == MIGRATION_STATUS_FAILED); s->state == MIGRATION_STATUS_FAILED);
} }
bool migration_in_postcopy(MigrationState *s) bool migration_in_postcopy(void)
{ {
MigrationState *s = migrate_get_current();
return (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE); return (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE);
} }
bool migration_in_postcopy_after_devices(MigrationState *s) bool migration_in_postcopy_after_devices(MigrationState *s)
{ {
return migration_in_postcopy(s) && s->postcopy_after_devices; return migration_in_postcopy() && s->postcopy_after_devices;
} }
bool migration_is_idle(MigrationState *s) bool migration_is_idle(MigrationState *s)
......
...@@ -776,10 +776,9 @@ static int save_zero_page(RAMState *rs, RAMBlock *block, ram_addr_t offset, ...@@ -776,10 +776,9 @@ static int save_zero_page(RAMState *rs, RAMBlock *block, ram_addr_t offset,
return pages; return pages;
} }
static void ram_release_pages(MigrationState *ms, const char *rbname, static void ram_release_pages(const char *rbname, uint64_t offset, int pages)
uint64_t offset, int pages)
{ {
if (!migrate_release_ram() || !migration_in_postcopy(ms)) { if (!migrate_release_ram() || !migration_in_postcopy()) {
return; return;
} }
...@@ -845,9 +844,9 @@ static int ram_save_page(RAMState *rs, MigrationState *ms, ...@@ -845,9 +844,9 @@ static int ram_save_page(RAMState *rs, MigrationState *ms,
* page would be stale * page would be stale
*/ */
xbzrle_cache_zero_page(rs, current_addr); xbzrle_cache_zero_page(rs, current_addr);
ram_release_pages(ms, block->idstr, pss->offset, pages); ram_release_pages(block->idstr, pss->offset, pages);
} else if (!rs->ram_bulk_stage && } else if (!rs->ram_bulk_stage &&
!migration_in_postcopy(ms) && migrate_use_xbzrle()) { !migration_in_postcopy() && migrate_use_xbzrle()) {
pages = save_xbzrle_page(rs, &p, current_addr, block, pages = save_xbzrle_page(rs, &p, current_addr, block,
offset, last_stage); offset, last_stage);
if (!last_stage) { if (!last_stage) {
...@@ -866,7 +865,7 @@ static int ram_save_page(RAMState *rs, MigrationState *ms, ...@@ -866,7 +865,7 @@ static int ram_save_page(RAMState *rs, MigrationState *ms,
if (send_async) { if (send_async) {
qemu_put_buffer_async(rs->f, p, TARGET_PAGE_SIZE, qemu_put_buffer_async(rs->f, p, TARGET_PAGE_SIZE,
migrate_release_ram() & migrate_release_ram() &
migration_in_postcopy(ms)); migration_in_postcopy());
} else { } else {
qemu_put_buffer(rs->f, p, TARGET_PAGE_SIZE); qemu_put_buffer(rs->f, p, TARGET_PAGE_SIZE);
} }
...@@ -896,8 +895,7 @@ static int do_compress_ram_page(QEMUFile *f, RAMBlock *block, ...@@ -896,8 +895,7 @@ static int do_compress_ram_page(QEMUFile *f, RAMBlock *block,
error_report("compressed data failed!"); error_report("compressed data failed!");
} else { } else {
bytes_sent += blen; bytes_sent += blen;
ram_release_pages(migrate_get_current(), block->idstr, ram_release_pages(block->idstr, offset & TARGET_PAGE_MASK, 1);
offset & TARGET_PAGE_MASK, 1);
} }
return bytes_sent; return bytes_sent;
...@@ -1033,7 +1031,7 @@ static int ram_save_compressed_page(RAMState *rs, MigrationState *ms, ...@@ -1033,7 +1031,7 @@ static int ram_save_compressed_page(RAMState *rs, MigrationState *ms,
} }
} }
if (pages > 0) { if (pages > 0) {
ram_release_pages(ms, block->idstr, pss->offset, pages); ram_release_pages(block->idstr, pss->offset, pages);
} }
} else { } else {
offset |= RAM_SAVE_FLAG_CONTINUE; offset |= RAM_SAVE_FLAG_CONTINUE;
...@@ -1041,7 +1039,7 @@ static int ram_save_compressed_page(RAMState *rs, MigrationState *ms, ...@@ -1041,7 +1039,7 @@ static int ram_save_compressed_page(RAMState *rs, MigrationState *ms,
if (pages == -1) { if (pages == -1) {
pages = compress_page_with_multi_thread(rs, block, offset); pages = compress_page_with_multi_thread(rs, block, offset);
} else { } else {
ram_release_pages(ms, block->idstr, pss->offset, pages); ram_release_pages(block->idstr, pss->offset, pages);
} }
} }
} }
...@@ -2200,7 +2198,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque) ...@@ -2200,7 +2198,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
rcu_read_lock(); rcu_read_lock();
if (!migration_in_postcopy(migrate_get_current())) { if (!migration_in_postcopy()) {
migration_bitmap_sync(rs); migration_bitmap_sync(rs);
} }
...@@ -2238,7 +2236,7 @@ static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size, ...@@ -2238,7 +2236,7 @@ static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE; remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
if (!migration_in_postcopy(migrate_get_current()) && if (!migration_in_postcopy() &&
remaining_size < max_size) { remaining_size < max_size) {
qemu_mutex_lock_iothread(); qemu_mutex_lock_iothread();
rcu_read_lock(); rcu_read_lock();
......
...@@ -1062,7 +1062,7 @@ int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy) ...@@ -1062,7 +1062,7 @@ int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
static bool should_send_vmdesc(void) static bool should_send_vmdesc(void)
{ {
MachineState *machine = MACHINE(qdev_get_machine()); MachineState *machine = MACHINE(qdev_get_machine());
bool in_postcopy = migration_in_postcopy(migrate_get_current()); bool in_postcopy = migration_in_postcopy();
return !machine->suppress_vmdesc && !in_postcopy; return !machine->suppress_vmdesc && !in_postcopy;
} }
...@@ -1111,7 +1111,7 @@ void qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only) ...@@ -1111,7 +1111,7 @@ void qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only)
int vmdesc_len; int vmdesc_len;
SaveStateEntry *se; SaveStateEntry *se;
int ret; int ret;
bool in_postcopy = migration_in_postcopy(migrate_get_current()); bool in_postcopy = migration_in_postcopy();
trace_savevm_state_complete_precopy(); trace_savevm_state_complete_precopy();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册