[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 10/12] tools/xl: add support for setting generic per-domain parameters
Add a new xl command "domain-set-parameters" and domain config file support for setting per-domain generic parameters. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- docs/man/xl.cfg.pod.5.in | 12 ++++++++++++ docs/man/xl.pod.1.in | 19 ++++++++++++++++++ tools/libxl/libxl.h | 10 ++++++++++ tools/libxl/libxl_create.c | 10 ++++++++++ tools/libxl/libxl_domain.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ tools/libxl/libxl_types.idl | 1 + tools/xl/xl.h | 1 + tools/xl/xl_cmdtable.c | 6 ++++++ tools/xl/xl_parse.c | 3 +++ tools/xl/xl_vmcontrol.c | 25 ++++++++++++++++++++++++ 10 files changed, 134 insertions(+) diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in index b72718151b..c97ae77129 100644 --- a/docs/man/xl.cfg.pod.5.in +++ b/docs/man/xl.cfg.pod.5.in @@ -604,6 +604,18 @@ option should only be used with a trusted device tree. Note that the partial device tree should avoid using the phandle 65000 which is reserved by the toolstack. +=item B<parameters="PARAMS"> + +Specifies generic parameters for the domain. C<PARAMS> is a list of +parameter settings in the form of "name[=value]" separated by blanks. +The following parameter settings are supported: + +=over 4 + +NONE + +=back + =back =head2 Devices diff --git a/docs/man/xl.pod.1.in b/docs/man/xl.pod.1.in index a2ddc4b2e0..7ab3e304d7 100644 --- a/docs/man/xl.pod.1.in +++ b/docs/man/xl.pod.1.in @@ -263,6 +263,25 @@ using a hardware domain separated from domain 0. =back +=item B<domain-set-parameters> [I<OPTIONS>] I<domain-id> I<params> + +Sets generic parameters I<params> for I<domain-id>. + +See the L<xl.cfg(5)> manpage for supported parameters. + +B<OPTIONS> + +=over 4 + +=item I<-t> + +Set the parameter only temporary. The parameter isn't added to the domain +config data, so it won't persist across migration or domain save/restore. + +=back + +=back + =item B<domid> I<domain-name> Converts a domain name to a domain id. diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index bd26d9fd4a..a3c87407a5 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -1164,6 +1164,13 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, const libxl_mac *src); */ #define LIBXL_HAVE_PVCALLS 1 +/* + * LIBXL_HAVE_DOMAIN_SET_PARAMETERS + * + * If this is defined setting per-domain parameters is supported. + */ +#define LIBXL_HAVE_DOMAIN_SET_PARAMETERS 1 + /* * LIBXL_HAVE_CPUPOOL_SET_PARAMETERS * @@ -1554,6 +1561,9 @@ int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid, LIBXL_EXTERNAL_CALLERS_ONLY; int libxl_domain_preserve(libxl_ctx *ctx, uint32_t domid, libxl_domain_create_info *info, const char *name_suffix, libxl_uuid new_uuid); +int libxl_domain_set_parameters(libxl_ctx *ctx, uint32_t domid, char *params, + bool temp); + /* get max. number of cpus supported by hypervisor */ int libxl_get_max_cpus(libxl_ctx *ctx); diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index dcfde7787e..1eb0e8f639 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -597,6 +597,16 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_config *d_config, goto out; } + if (d_config->b_info.parameters) { + ret = xc_set_domain_parameters(ctx->xch, *domid, + d_config->b_info.parameters); + if (ret < 0) { + LOGED(ERROR, *domid, "fail to set domain parameters"); + rc = ERROR_FAIL; + goto out; + } + } + rc = libxl__arch_domain_save_config(gc, d_config, state, &create); if (rc < 0) goto out; diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c index 3377bba994..e0f78ac489 100644 --- a/tools/libxl/libxl_domain.c +++ b/tools/libxl/libxl_domain.c @@ -1773,6 +1773,53 @@ out: return rc; } +int libxl_domain_set_parameters(libxl_ctx *ctx, uint32_t domid, char *params, + bool temp) +{ + libxl__domain_userdata_lock *lock = NULL; + libxl_domain_config d_config; + GC_INIT(ctx); + int rc; + + libxl_domain_config_init(&d_config); + + rc = xc_set_domain_parameters(ctx->xch, domid, params); + if (rc) { + LOGEV(ERROR, rc, "Error setting domain parameters"); + rc = ERROR_FAIL; + goto out; + } + + if (!temp) { + lock = libxl__lock_domain_userdata(gc, domid); + if (!lock) { + rc = ERROR_LOCK_FAIL; + goto out; + } + + rc = libxl__get_domain_configuration(gc, domid, &d_config); + if (rc) goto out; + + if (d_config.b_info.parameters) { + d_config.b_info.parameters = + libxl__realloc(gc, d_config.b_info.parameters, + strlen(d_config.b_info.parameters) + + strlen(params) + 2); + strcat(d_config.b_info.parameters, " "); + strcat(d_config.b_info.parameters, params); + } else + d_config.b_info.parameters = libxl__strdup(gc, params); + + rc = libxl__set_domain_configuration(gc, domid, &d_config); + } + +out: + if (lock) libxl__unlock_domain_userdata(lock); + libxl_domain_config_dispose(&d_config); + GC_FREE; + return rc; +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 2cceb8c057..382a6c1d6e 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -488,6 +488,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ ("max_grant_frames", uint32, {'init_val': 'LIBXL_MAX_GRANT_FRAMES_DEFAULT'}), ("max_maptrack_frames", uint32, {'init_val': 'LIBXL_MAX_MAPTRACK_FRAMES_DEFAULT'}), + ("parameters", string), ("device_model_version", libxl_device_model_version), ("device_model_stubdomain", libxl_defbool), diff --git a/tools/xl/xl.h b/tools/xl/xl.h index a51acc4256..3153a35f22 100644 --- a/tools/xl/xl.h +++ b/tools/xl/xl.h @@ -151,6 +151,7 @@ int main_sched_credit2(int argc, char **argv); int main_sched_rtds(int argc, char **argv); int main_domid(int argc, char **argv); int main_domname(int argc, char **argv); +int main_domainsetparameters(int argc, char **argv); int main_rename(int argc, char **argv); int main_trigger(int argc, char **argv); int main_sysrq(int argc, char **argv); diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c index 3a469dacc3..41e5bd27a3 100644 --- a/tools/xl/xl_cmdtable.c +++ b/tools/xl/xl_cmdtable.c @@ -285,6 +285,12 @@ struct cmd_spec cmd_table[] = { "-b BUDGET, --budget=BUDGET Budget (us)\n" "-e Extratime, --extratime=Extratime Extratime (1=yes, 0=no)\n" }, + { "domain-set-parameters", + &main_domainsetparameters, 0, 1, + "Sets generic parameters for a domain", + "[-t] <Domain> <Params>", + " -t Set parameter only temporary", + }, { "domid", &main_domid, 0, 0, "Convert a domain name to domain id", diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c index 971ec1bc56..0a6fe141b9 100644 --- a/tools/xl/xl_parse.c +++ b/tools/xl/xl_parse.c @@ -1558,6 +1558,9 @@ void parse_config_data(const char *config_source, xlu_cfg_get_defbool(config, "nestedhvm", &b_info->nested_hvm, 0); + if (!xlu_cfg_get_string (config, "parameters", &buf, 0)) + xlu_cfg_replace_string(config, "parameters", &b_info->parameters, 0); + switch(b_info->type) { case LIBXL_DOMAIN_TYPE_HVM: kernel_basename = libxl_basename(b_info->kernel); diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c index a1d633795c..8fa2338621 100644 --- a/tools/xl/xl_vmcontrol.c +++ b/tools/xl/xl_vmcontrol.c @@ -275,6 +275,31 @@ int main_reboot(int argc, char **argv) return main_shutdown_or_reboot(1, argc, argv); } +int main_domainsetparameters(int argc, char **argv) +{ + int opt; + char *params; + uint32_t domid; + bool temp = false; + + SWITCH_FOREACH_OPT(opt, "t", NULL, "domain-set-parameters", 2) { + case 't': + temp = true; + break; + } + + domid = find_domain(argv[optind]); + params = argv[++optind]; + + if (libxl_domain_set_parameters(ctx, domid, params, temp)) { + fprintf(stderr, "cannot set parameters: %s\n", params); + fprintf(stderr, "Use \"xl dmesg\" to look for possible reason.\n"); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + static void evdisable_disk_ejects(libxl_evgen_disk_eject **diskws, int num_disks) { -- 2.16.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |