|
[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 |