/* Convenience aliases. */
libxl__logdirty_switch *const lds = &dss->logdirty;
+ if (dss->type == LIBXL_DOMAIN_TYPE_PVH) {
+ domain_suspend_switch_qemu_logdirty_done(egc, lds, 0);
+ return;
+ }
+
lds->callback = domain_suspend_switch_qemu_logdirty_done;
libxl__domain_common_switch_qemu_logdirty(egc, domid, enable, lds);
}
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
domain_suspend_switch_qemu_xen_logdirty(egc, domid, enable, lds);
break;
- case LIBXL_DEVICE_MODEL_VERSION_NONE:
- lds->callback(egc, lds, 0);
- break;
default:
LOG(ERROR,"logdirty switch failed"
", no valid device model version found, abandoning suspend");
if (rc) goto out;
switch (type) {
+ case LIBXL_DOMAIN_TYPE_PVH:
case LIBXL_DOMAIN_TYPE_HVM: {
dss->hvm = 1;
break;
if (ret)
unlink(filename);
break;
- case LIBXL_DEVICE_MODEL_VERSION_NONE:
- break;
default:
return ERROR_INVAL;
}
/* Convenience aliases */
const uint32_t domid = dsps->domid;
- if (dsps->type == LIBXL_DOMAIN_TYPE_HVM) {
+ if (dsps->type != LIBXL_DOMAIN_TYPE_PV) {
xc_hvm_param_get(CTX->xch, domid, HVM_PARAM_CALLBACK_IRQ, &hvm_pvdrv);
xc_hvm_param_get(CTX->xch, domid, HVM_PARAM_ACPI_S_STATE, &hvm_s_state);
}
if ((hvm_s_state == 0) && (dsps->guest_evtchn.port >= 0)) {
LOG(DEBUG, "issuing %s suspend request via event channel",
- dsps->type == LIBXL_DOMAIN_TYPE_HVM ? "PVHVM" : "PV");
+ dsps->type != LIBXL_DOMAIN_TYPE_PV ? "PVH/HVM" : "PV");
ret = xenevtchn_notify(CTX->xce, dsps->guest_evtchn.port);
if (ret < 0) {
LOG(ERROR, "xenevtchn_notify failed ret=%d", ret);
}
LOG(DEBUG, "issuing %s suspend request via XenBus control node",
- dsps->type == LIBXL_DOMAIN_TYPE_HVM ? "PVHVM" : "PV");
+ dsps->type != LIBXL_DOMAIN_TYPE_PV ? "PVH/HVM" : "PV");
libxl__domain_pvcontrol_write(gc, XBT_NULL, domid, "suspend");