@@ -64,7 +64,7 @@ int libxl__domain_create_info_setdefault(libxl__gc *gc,
c_info->ssidref = SECINITSID_DOMU;
if (info.cap_hvm_directio &&
- (c_info->passthrough == LIBXL_PASSTHROUGH_ENABLED)) {
+ (c_info->passthrough == LIBXL_PASSTHROUGH_UNKNOWN)) {
c_info->passthrough = ((c_info->type == LIBXL_DOMAIN_TYPE_PV) ||
!info.cap_iommu_hap_pt_share) ?
LIBXL_PASSTHROUGH_SYNC_PT : LIBXL_PASSTHROUGH_SHARE_PT;
@@ -586,7 +586,7 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_config *d_config,
libxl_defbool_val(info->oos) ? 0 : XEN_DOMCTL_CDF_oos_off;
}
- assert(info->passthrough != LIBXL_PASSTHROUGH_ENABLED);
+ assert(info->passthrough != LIBXL_PASSTHROUGH_UNKNOWN);
LOG(DETAIL, "passthrough: %s",
libxl_passthrough_to_string(info->passthrough));
@@ -264,7 +264,7 @@ libxl_vkb_backend = Enumeration("vkb_backend", [
])
libxl_passthrough = Enumeration("passthrough", [
- (0, "enabled"),
+ (0, "unknown"),
(1, "disabled"),
(2, "sync_pt"),
(3, "share_pt"),
@@ -1512,23 +1512,27 @@ void parse_config_data(const char *config_source,
if (xlu_cfg_get_string(config, "passthrough", &buf, 0)) {
c_info->passthrough =
(d_config->num_pcidevs || d_config->num_dtdevs)
- ? LIBXL_PASSTHROUGH_ENABLED : LIBXL_PASSTHROUGH_DISABLED;
+ ? LIBXL_PASSTHROUGH_UNKNOWN : LIBXL_PASSTHROUGH_DISABLED;
} else {
- libxl_passthrough o;
+ if (!strcasecmp("enabled", buf))
+ c_info->passthrough = LIBXL_PASSTHROUGH_UNKNOWN;
+ else {
+ libxl_passthrough o;
- e = libxl_passthrough_from_string(buf, &o);
- if (e) {
- fprintf(stderr,
- "ERROR: unknown passthrough option '%s'\n",
- buf);
- exit(-ERROR_FAIL);
- }
+ e = libxl_passthrough_from_string(buf, &o);
+ if (e || !strcasecmp("unknown", buf)) {
+ fprintf(stderr,
+ "ERROR: unknown passthrough option '%s'\n",
+ buf);
+ exit(-ERROR_FAIL);
+ }
- c_info->passthrough = o;
+ c_info->passthrough = o;
+ }
}
switch (c_info->passthrough) {
- case LIBXL_PASSTHROUGH_ENABLED:
+ case LIBXL_PASSTHROUGH_UNKNOWN:
/*
* Choose a suitable default. libxl would also do this but
* choosing here allows the code calculating 'iommu_memkb'
This is mostly a cosmetic patch to avoid the default enumeration value being 'enabled'. The only non-cosmetic parts are in xl_parse.c where it now becomes necessary to explicitly parse the 'enabled' value for xl.cfg 'passthrough' option, and error on the value 'unknown', because there is no longer a direct mapping between valid xl.cfg values and the enumeration. Suggested-by: Ian Jackson <ian.jackson@eu.citrix.com> Signed-off-by: Paul Durrant <paul.durrant@citrix.com> --- Cc: Wei Liu <wl@xen.org> Cc: Anthony PERARD <anthony.perard@citrix.com> Cc: Juergen Gross <jgross@suse.com> v2: - new in v2 --- tools/libxl/libxl_create.c | 4 ++-- tools/libxl/libxl_types.idl | 2 +- tools/xl/xl_parse.c | 26 +++++++++++++++----------- 3 files changed, 18 insertions(+), 14 deletions(-)