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;
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));
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'