From: Zhang Chen Date: Mon, 6 Mar 2017 02:59:21 +0000 (+0800) Subject: COLO-Proxy: Setup userspace colo-proxy on secondary side X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~2513 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=97171477b99dd9201e1dc3bd82807c8e1138507e;p=xen.git COLO-Proxy: Setup userspace colo-proxy on secondary side In this patch we add a function to close COLO kernel Proxy on secondary side. Signed-off-by: Zhang Chen Acked-by: Wei Liu --- diff --git a/tools/libxl/libxl_colo_restore.c b/tools/libxl/libxl_colo_restore.c index 6a96328664..c6d239a519 100644 --- a/tools/libxl/libxl_colo_restore.c +++ b/tools/libxl/libxl_colo_restore.c @@ -774,8 +774,12 @@ static void colo_setup_checkpoint_devices(libxl__egc *egc, STATE_AO_GC(crs->ao); - cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) | - (1 << LIBXL__DEVICE_KIND_VBD); + if (crs->cps.is_userspace_proxy) + cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VBD); + else + cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) | + (1 << LIBXL__DEVICE_KIND_VBD); + cds->callback = colo_restore_setup_cds_done; cds->ao = ao; cds->domid = crs->domid; diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index e741b9a39a..409945a363 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -1633,11 +1633,15 @@ static int do_domain_create(libxl_ctx *ctx, libxl_domain_config *d_config, cdcs->dcs.domid_soft_reset = INVALID_DOMID; if (cdcs->dcs.restore_params.checkpointed_stream == - LIBXL_CHECKPOINTED_STREAM_COLO) + LIBXL_CHECKPOINTED_STREAM_COLO) { cdcs->dcs.colo_proxy_script = cdcs->dcs.restore_params.colo_proxy_script; - else + cdcs->dcs.crs.cps.is_userspace_proxy = + libxl_defbool_val(cdcs->dcs.restore_params.userspace_colo_proxy); + } else { cdcs->dcs.colo_proxy_script = NULL; + cdcs->dcs.crs.cps.is_userspace_proxy = false; + } libxl__ao_progress_gethow(&cdcs->dcs.aop_console_how, aop_console_how); cdcs->domid_out = domid; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 1bd2057dd2..89c2c9dc66 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -390,6 +390,7 @@ libxl_domain_restore_params = Struct("domain_restore_params", [ ("checkpointed_stream", integer), ("stream_version", uint32, {'init_val': '1'}), ("colo_proxy_script", string), + ("userspace_colo_proxy", libxl_defbool), ]) libxl_sched_params = Struct("sched_params",[ diff --git a/tools/xl/xl.h b/tools/xl/xl.h index 1ad07261f2..aa95b77146 100644 --- a/tools/xl/xl.h +++ b/tools/xl/xl.h @@ -45,6 +45,7 @@ struct domain_create { char *extra_config; /* extra config string */ const char *restore_file; char *colo_proxy_script; + bool userspace_colo_proxy; int migrate_fd; /* -1 means none */ int send_back_fd; /* -1 means none */ char **migration_domname_r; /* from malloc */ diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c index 3b47ca67d0..1f0e87df50 100644 --- a/tools/xl/xl_migrate.c +++ b/tools/xl/xl_migrate.c @@ -319,7 +319,8 @@ static void migrate_receive(int debug, int daemonize, int monitor, int pause_after_migration, int send_fd, int recv_fd, libxl_checkpointed_stream checkpointed, - char *colo_proxy_script) + char *colo_proxy_script, + bool userspace_colo_proxy) { uint32_t domid; int rc, rc2; @@ -347,6 +348,7 @@ static void migrate_receive(int debug, int daemonize, int monitor, dom_info.migration_domname_r = &migration_domname; dom_info.checkpointed_stream = checkpointed; dom_info.colo_proxy_script = colo_proxy_script; + dom_info.userspace_colo_proxy = userspace_colo_proxy; rc = create_domain(&dom_info); if (rc < 0) { @@ -478,11 +480,13 @@ int main_migrate_receive(int argc, char **argv) int debug = 0, daemonize = 1, monitor = 1, pause_after_migration = 0; libxl_checkpointed_stream checkpointed = LIBXL_CHECKPOINTED_STREAM_NONE; int opt; + bool userspace_colo_proxy = false; char *script = NULL; static struct option opts[] = { {"colo", 0, 0, 0x100}, /* It is a shame that the management code for disk is not here. */ {"coloft-script", 1, 0, 0x200}, + {"userspace-colo-proxy", 0, 0, 0x300}, COMMON_LONG_OPTS }; @@ -506,6 +510,9 @@ int main_migrate_receive(int argc, char **argv) case 0x200: script = optarg; break; + case 0x300: + userspace_colo_proxy = true; + break; case 'p': pause_after_migration = 1; break; @@ -517,7 +524,7 @@ int main_migrate_receive(int argc, char **argv) } migrate_receive(debug, daemonize, monitor, pause_after_migration, STDOUT_FILENO, STDIN_FILENO, - checkpointed, script); + checkpointed, script, userspace_colo_proxy); return EXIT_SUCCESS; } @@ -698,11 +705,13 @@ int main_remus(int argc, char **argv) "-r", daemonize ? "" : " -e"); } else { - xasprintf(&rune, "exec %s %s xl migrate-receive %s %s %s %s", + xasprintf(&rune, "exec %s %s xl migrate-receive %s %s %s %s %s", ssh_command, host, "--colo", r_info.netbufscript ? "--coloft-script" : "", r_info.netbufscript ? r_info.netbufscript : "", + libxl_defbool_val(r_info.userspace_colo_proxy) ? + "--userspace-colo-proxy" : "", daemonize ? "" : " -e"); } } diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c index 0ad6e0bcbb..89c2b25ded 100644 --- a/tools/xl/xl_vmcontrol.c +++ b/tools/xl/xl_vmcontrol.c @@ -877,6 +877,8 @@ start: params.stream_version = (hdr.mandatory_flags & XL_MANDATORY_FLAG_STREAMv2) ? 2 : 1; params.colo_proxy_script = dom_info->colo_proxy_script; + libxl_defbool_set(¶ms.userspace_colo_proxy, + dom_info->userspace_colo_proxy); ret = libxl_domain_create_restore(ctx, &d_config, &domid, restore_fd,