return ERROR_INVAL;
}
- if (c_info->type == LIBXL_DOMAIN_TYPE_HVM) {
+ if (c_info->type != LIBXL_DOMAIN_TYPE_PV) {
libxl_defbool_setdefault(&c_info->hap, true);
libxl_defbool_setdefault(&c_info->oos, true);
} else {
int i, rc;
if (b_info->type != LIBXL_DOMAIN_TYPE_HVM &&
- b_info->type != LIBXL_DOMAIN_TYPE_PV) {
+ b_info->type != LIBXL_DOMAIN_TYPE_PV &&
+ b_info->type != LIBXL_DOMAIN_TYPE_PVH) {
LOG(ERROR, "invalid domain type");
return ERROR_INVAL;
}
b_info->u.hvm.bios = LIBXL_BIOS_TYPE_ROMBIOS; break;
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
b_info->u.hvm.bios = LIBXL_BIOS_TYPE_SEABIOS; break;
- case LIBXL_DEVICE_MODEL_VERSION_NONE:
- break;
default:
LOG(ERROR, "unknown device model version");
return ERROR_INVAL;
return ERROR_INVAL;
}
break;
- case LIBXL_DEVICE_MODEL_VERSION_NONE:
- break;
default:abort();
}
b_info->u.hvm.mmio_hole_memkb = 0;
if (b_info->u.hvm.vga.kind == LIBXL_VGA_INTERFACE_TYPE_UNKNOWN) {
- if (b_info->device_model_version == LIBXL_DEVICE_MODEL_VERSION_NONE)
- b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_NONE;
- else
- b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
+ b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
}
if (!b_info->u.hvm.hdtype)
break;
}
break;
- case LIBXL_DEVICE_MODEL_VERSION_NONE:
- if (b_info->u.hvm.vga.kind != LIBXL_VGA_INTERFACE_TYPE_NONE) {
- LOG(ERROR,
- "guests without a device model cannot have an emulated video card");
- return ERROR_INVAL;
- }
b_info->video_memkb = 0;
break;
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
b_info->u.pv.cmdline = NULL;
}
break;
+ case LIBXL_DOMAIN_TYPE_PVH:
+ break;
default:
LOG(ERROR, "invalid domain type %s in create info",
libxl_domain_type_to_string(b_info->type));
vments[i++] = (char *) state->pv_cmdline;
}
+ break;
+ case LIBXL_DOMAIN_TYPE_PVH:
+ ret = libxl__build_hvm(gc, domid, d_config, state);
+ if (ret)
+ goto out;
+
+ vments = libxl__calloc(gc, 3, sizeof(char *));
+ vments[0] = "start_time";
+ vments[1] = GCSPRINTF("%"PRIu64".%02ld",
+ (uint64_t)start_time.tv_sec,
+ (long)start_time.tv_usec/10000);
+
break;
default:
ret = ERROR_INVAL;
}
flags = 0;
- if (info->type == LIBXL_DOMAIN_TYPE_HVM) {
+ if (info->type != LIBXL_DOMAIN_TYPE_PV) {
flags |= XEN_DOMCTL_CDF_hvm_guest;
flags |= libxl_defbool_val(info->hap) ? XEN_DOMCTL_CDF_hap : 0;
flags |= libxl_defbool_val(info->oos) ? 0 : XEN_DOMCTL_CDF_oos_off;
/* If target_memkb is smaller than max_memkb, the subsequent call
* to libxc when building HVM domain will enable PoD mode.
*/
- pod_enabled = (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM) &&
+ pod_enabled = (d_config->c_info.type != LIBXL_DOMAIN_TYPE_PV) &&
(d_config->b_info.target_memkb < d_config->b_info.max_memkb);
/* We cannot have PoD and PCI device assignment at the same time
* guest. To stay on the safe side, we disable PCI device
* assignment when PoD is enabled.
*/
- if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM &&
+ if (d_config->c_info.type != LIBXL_DOMAIN_TYPE_PV &&
d_config->num_pcidevs && pod_enabled) {
ret = ERROR_INVAL;
LOG(ERROR, "PCI device assignment for HVM guest failed due to PoD enabled");
goto error_out;
}
- if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM &&
+ if (d_config->c_info.type != LIBXL_DOMAIN_TYPE_PV &&
(libxl_defbool_val(*U_HVM_F(&d_config->b_info,nested_hvm)) &&
libxl_defbool_val(d_config->b_info.u.hvm.altp2m))) {
ret = ERROR_INVAL;
goto error_out;
}
- if (d_config->c_info.type == LIBXL_DOMAIN_TYPE_HVM &&
+ if (d_config->c_info.type != LIBXL_DOMAIN_TYPE_PV &&
libxl_defbool_val(d_config->b_info.u.hvm.altp2m) &&
pod_enabled) {
ret = ERROR_INVAL;
crs->domid = domid;
crs->send_back_fd = dcs->send_back_fd;
crs->recv_fd = restore_fd;
- crs->hvm = (info->type == LIBXL_DOMAIN_TYPE_HVM);
+ crs->hvm = (info->type != LIBXL_DOMAIN_TYPE_PV);
crs->callback = libxl__colo_restore_setup_done;
libxl__colo_restore_setup(egc, crs);
break;
vments[i++] = (char *) state->pv_cmdline;
}
break;
+ case LIBXL_DOMAIN_TYPE_PVH:
+ vments = libxl__calloc(gc, 3, sizeof(char *));
+ vments[0] = "start_time";
+ vments[1] = GCSPRINTF("%"PRIu64".%02ld",
+ (uint64_t)start_time.tv_sec,
+ (long)start_time.tv_usec/10000);
+ break;
default:
ret = ERROR_INVAL;
goto out;
libxl__device_console_add(gc, domid, &console, state, &device);
libxl__device_console_dispose(&console);
- if (d_config->b_info.device_model_version ==
- LIBXL_DEVICE_MODEL_VERSION_NONE) {
- domcreate_devmodel_started(egc, &dcs->sdss.dm, 0);
- return;
- }
-
libxl_device_vkb_init(&vkb);
libxl__device_vkb_add(gc, domid, &vkb);
libxl_device_vkb_dispose(&vkb);
return;
}
case LIBXL_DOMAIN_TYPE_PV:
+ case LIBXL_DOMAIN_TYPE_PVH:
{
libxl__device_console console;
libxl__device device;
goto error;
}
- savefile = GCSPRINTF(LIBXL_DEVICE_MODEL_SAVE_FILE".%d", dds->domid);
- restorefile = GCSPRINTF(LIBXL_DEVICE_MODEL_RESTORE_FILE".%d", dds->domid);
- rc = rename(savefile, restorefile);
- if (rc) {
- LOG(ERROR, "failed to rename dm save file.");
- goto error;
+ if (cdcs->dcs.guest_config->b_info.type == LIBXL_DOMAIN_TYPE_HVM) {
+ savefile = GCSPRINTF(LIBXL_DEVICE_MODEL_SAVE_FILE".%d", dds->domid);
+ restorefile = GCSPRINTF(LIBXL_DEVICE_MODEL_RESTORE_FILE".%d", dds->domid);
+ rc = rename(savefile, restorefile);
+ if (rc) {
+ LOG(ERROR, "failed to rename dm save file.");
+ goto error;
+ }
}
initiate_domain_create(egc, &cdcs->dcs);