[libvirt] [PATCH V2 5/5] xen: add .domainSendSysrq method

Chunyan Liu cyliu at suse.com
Fri Dec 12 09:04:17 UTC 2014


Support .domainSendSysrq in xen driver.

Signed-off-by: Chunyan Liu <cyliu at 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




More information about the libvir-list mailing list