diff options
author | zhanghailiang <zhang.zhanghailiang@huawei.com> | 2016-10-27 14:42:56 +0800 |
---|---|---|
committer | Amit Shah <amit@amitshah.net> | 2016-10-30 15:17:39 +0530 |
commit | 56ba83d2a871a28ec18b8bb0fcec74ed02bbe06c (patch) | |
tree | 00c2152467827c5d03c6ff62aa3635ac75c34782 /migration/colo.c | |
parent | 25d0c16f625feb3b6b9bf8079388cdd314e63916 (diff) | |
download | qemu-56ba83d2a871a28ec18b8bb0fcec74ed02bbe06c.zip |
COLO: Establish a new communicating path for COLO
This new communication path will be used for returning messages
from Secondary side to Primary side.
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Amit Shah <amit@amitshah.net>
Diffstat (limited to 'migration/colo.c')
-rw-r--r-- | migration/colo.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/migration/colo.c b/migration/colo.c index 550cc5f122..3a0d8043e6 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -14,6 +14,7 @@ #include "sysemu/sysemu.h" #include "migration/colo.h" #include "trace.h" +#include "qemu/error-report.h" bool colo_supported(void) { @@ -36,6 +37,12 @@ bool migration_incoming_in_colo_state(void) static void colo_process_checkpoint(MigrationState *s) { + s->rp_state.from_dst_file = qemu_file_get_return_path(s->to_dst_file); + if (!s->rp_state.from_dst_file) { + error_report("Open QEMUFile from_dst_file failed"); + goto out; + } + qemu_mutex_lock_iothread(); vm_start(); qemu_mutex_unlock_iothread(); @@ -43,6 +50,10 @@ static void colo_process_checkpoint(MigrationState *s) /* TODO: COLO checkpoint savevm loop */ +out: + if (s->rp_state.from_dst_file) { + qemu_fclose(s->rp_state.from_dst_file); + } } void migrate_start_colo_process(MigrationState *s) @@ -61,8 +72,25 @@ void *colo_process_incoming_thread(void *opaque) migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE, MIGRATION_STATUS_COLO); + mis->to_src_file = qemu_file_get_return_path(mis->from_src_file); + if (!mis->to_src_file) { + error_report("COLO incoming thread: Open QEMUFile to_src_file failed"); + goto out; + } + /* + * Note: the communication between Primary side and Secondary side + * should be sequential, we set the fd to unblocked in migration incoming + * coroutine, and here we are in the COLO incoming thread, so it is ok to + * set the fd back to blocked. + */ + qemu_file_set_blocking(mis->from_src_file, true); + /* TODO: COLO checkpoint restore loop */ +out: + if (mis->to_src_file) { + qemu_fclose(mis->to_src_file); + } migration_incoming_exit_colo(); return NULL; |