Support .domainSendSysrq in xen driver.
Signed-off-by: Chunyan Liu <cyliu(a)suse.com>
---
src/xen/xen_driver.c | 19 +++++++++++++++++++
src/xen/xend_internal.c | 20 ++++++++++++++++++++
src/xen/xend_internal.h | 2 ++
3 files changed, 41 insertions(+)
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index c9f4159..e2b01cf 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -2738,6 +2738,24 @@ xenUnifiedNodeSuspendForDuration(virConnectPtr conn,
return nodeSuspendForDuration(target, duration, flags);
}
+static int
+xenUnifiedDomainSendSysrq(virDomainPtr dom, const char *key)
+{
+ int ret = -1;
+ virDomainDefPtr def = NULL;
+
+ if (!(def = xenGetDomainDefForDom(dom)))
+ goto cleanup;
+
+ if (virDomainSendSysrqEnsureACL(dom->conn, def) < 0)
+ goto cleanup;
+
+ ret = xenDaemonDomainSysrq(dom->conn, def, key);
+
+ cleanup:
+ virDomainDefFree(def);
+ return ret;
+}
/*----- Register with libvirt.c, and initialize Xen drivers. -----*/
@@ -2836,6 +2854,7 @@ static virHypervisorDriver xenUnifiedDriver = {
.nodeSuspendForDuration = xenUnifiedNodeSuspendForDuration, /* 0.9.8 */
.nodeGetMemoryParameters = xenUnifiedNodeGetMemoryParameters, /* 0.10.2 */
.nodeSetMemoryParameters = xenUnifiedNodeSetMemoryParameters, /* 0.10.2 */
+ .domainSendSysrq = xenUnifiedDomainSendSysrq, /* 1.2.11 */
};
/**
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index b233b6b..62b6e31 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -3300,6 +3300,26 @@ xenDaemonDomainBlockPeek(virConnectPtr conn,
return ret;
}
+/*
+ * xenDaemonDomainSysrq:
+ * <at> conn: the connection object
+ * <at> def: the domain to destroy
+ *
+ * Send a sysrq to a domain.
+ *
+ * Returns 0 in case of success, -1 (with errno) in case of error.
+ */
+int
+xenDaemonDomainSysrq(virConnectPtr conn, virDomainDefPtr def, const char *key)
+{
+ if (def->id < 0) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("Domain %s isn't running."), def->name);
+ return -1;
+ }
+
+ return xend_op(conn, def->name, "op", "sysrq",
"key", key, NULL);
+}
/**
* virDomainXMLDevID:
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
index 814330d..26ab5e3 100644
--- a/src/xen/xend_internal.h
+++ b/src/xen/xend_internal.h
@@ -213,5 +213,7 @@ int xenDaemonSetSchedulerParameters(virConnectPtr conn,
virDomainDefPtr def,
virTypedParameterPtr params,
int nparams);
+int xenDaemonDomainSysrq(virConnectPtr conn, virDomainDefPtr def,
+ const char *key);
#endif /* __XEND_INTERNAL_H_ */
--
1.8.4.5