提交 c4fe29f8 编写于 作者: J Jim Fehlig

libxl: support PARAVIRT and ACPI shutdown flags

Add support for VIR_DOMAIN_SHUTDOWN_PARAVIRT and
VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN flags in
libxlDomainShutdownFlags().
上级 b98bf811
......@@ -873,7 +873,11 @@ libxlDomainShutdownFlags(virDomainPtr dom, unsigned int flags)
int ret = -1;
libxlDomainObjPrivatePtr priv;
virCheckFlags(0, -1);
virCheckFlags(VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN |
VIR_DOMAIN_SHUTDOWN_PARAVIRT, -1);
if (flags == 0)
flags = VIR_DOMAIN_SHUTDOWN_PARAVIRT |
VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN;
if (!(vm = libxlDomObjFromDomain(dom)))
goto cleanup;
......@@ -888,18 +892,33 @@ libxlDomainShutdownFlags(virDomainPtr dom, unsigned int flags)
}
priv = vm->privateData;
if (libxl_domain_shutdown(priv->ctx, vm->def->id) != 0) {
if (flags & VIR_DOMAIN_SHUTDOWN_PARAVIRT) {
ret = libxl_domain_shutdown(priv->ctx, vm->def->id);
if (ret == 0)
goto cleanup;
if (ret != ERROR_NOPARAVIRT) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to shutdown domain '%d' with libxenlight"),
vm->def->id);
ret = -1;
goto cleanup;
}
ret = -1;
}
if (flags & VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN) {
ret = libxl_send_trigger(priv->ctx, vm->def->id,
LIBXL_TRIGGER_POWER, 0);
if (ret == 0)
goto cleanup;
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to shutdown domain '%d' with libxenlight"),
vm->def->id);
goto cleanup;
ret = -1;
}
/* vm is marked shutoff (or removed from domains list if not persistent)
* in shutdown event handler.
*/
ret = 0;
cleanup:
if (vm)
virObjectUnlock(vm);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册