6d3351
From e43851128b407dea2a55a813bdbefc5a639f1914 Mon Sep 17 00:00:00 2001
6d3351
Message-Id: <e43851128b407dea2a55a813bdbefc5a639f1914@dist-git>
6d3351
From: Jiri Denemark <jdenemar@redhat.com>
6d3351
Date: Fri, 2 Jun 2017 22:50:18 +0200
6d3351
Subject: [PATCH] qemu: Implement virSaveCookie object and callbacks
6d3351
6d3351
This patch implements a new save cookie object and callbacks for qemu
6d3351
driver. The actual useful content will be added in the object later.
6d3351
6d3351
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6d3351
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6d3351
(cherry picked from commit 215476b64226275ac090ca0e957bfca76ba1549e)
6d3351
6d3351
https://bugzilla.redhat.com/show_bug.cgi?id=1441662
6d3351
6d3351
Conflicts:
6d3351
	src/qemu/qemu_domain.c - no qemuDomainLogContextClass in 7.4
6d3351
6d3351
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
6d3351
---
6d3351
 src/qemu/qemu_conf.c   |  2 +-
6d3351
 src/qemu/qemu_domain.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++
6d3351
 src/qemu/qemu_domain.h |  9 ++++++
6d3351
 3 files changed, 93 insertions(+), 1 deletion(-)
6d3351
6d3351
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
6d3351
index 96956b7779..51a42883dc 100644
6d3351
--- a/src/qemu/qemu_conf.c
6d3351
+++ b/src/qemu/qemu_conf.c
6d3351
@@ -909,7 +909,7 @@ virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver)
6d3351
                                  &virQEMUDriverPrivateDataCallbacks,
6d3351
                                  &virQEMUDriverDomainXMLNamespace,
6d3351
                                  &virQEMUDriverDomainABIStability,
6d3351
-                                 NULL);
6d3351
+                                 &virQEMUDriverDomainSaveCookie);
6d3351
 }
6d3351
 
6d3351
 
6d3351
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
6d3351
index 09903bdd5f..63fcde8024 100644
6d3351
--- a/src/qemu/qemu_domain.c
6d3351
+++ b/src/qemu/qemu_domain.c
6d3351
@@ -120,6 +120,24 @@ struct _qemuDomainLogContext {
6d3351
     virLogManagerPtr manager;
6d3351
 };
6d3351
 
6d3351
+static virClassPtr qemuDomainSaveCookieClass;
6d3351
+
6d3351
+static void qemuDomainSaveCookieDispose(void *obj);
6d3351
+
6d3351
+static int
6d3351
+qemuDomainOnceInit(void)
6d3351
+{
6d3351
+    if (!(qemuDomainSaveCookieClass = virClassNew(virClassForObject(),
6d3351
+                                                  "qemuDomainSaveCookie",
6d3351
+                                                  sizeof(qemuDomainSaveCookie),
6d3351
+                                                  qemuDomainSaveCookieDispose)))
6d3351
+        return -1;
6d3351
+
6d3351
+    return 0;
6d3351
+}
6d3351
+
6d3351
+VIR_ONCE_GLOBAL_INIT(qemuDomain)
6d3351
+
6d3351
 const char *
6d3351
 qemuDomainAsyncJobPhaseToString(qemuDomainAsyncJob job,
6d3351
                                 int phase ATTRIBUTE_UNUSED)
6d3351
@@ -9080,3 +9098,68 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
6d3351
     VIR_FREE(target);
6d3351
     return src;
6d3351
 }
6d3351
+
6d3351
+
6d3351
+static void
6d3351
+qemuDomainSaveCookieDispose(void *obj)
6d3351
+{
6d3351
+    qemuDomainSaveCookiePtr cookie = obj;
6d3351
+
6d3351
+    VIR_DEBUG("cookie=%p", cookie);
6d3351
+}
6d3351
+
6d3351
+
6d3351
+qemuDomainSaveCookiePtr
6d3351
+qemuDomainSaveCookieNew(virDomainObjPtr vm ATTRIBUTE_UNUSED)
6d3351
+{
6d3351
+    qemuDomainSaveCookiePtr cookie = NULL;
6d3351
+
6d3351
+    if (qemuDomainInitialize() < 0)
6d3351
+        goto error;
6d3351
+
6d3351
+    if (!(cookie = virObjectNew(qemuDomainSaveCookieClass)))
6d3351
+        goto error;
6d3351
+
6d3351
+    VIR_DEBUG("Save cookie %p", cookie);
6d3351
+
6d3351
+    return cookie;
6d3351
+
6d3351
+ error:
6d3351
+    virObjectUnref(cookie);
6d3351
+    return NULL;
6d3351
+}
6d3351
+
6d3351
+
6d3351
+static int
6d3351
+qemuDomainSaveCookieParse(xmlXPathContextPtr ctxt ATTRIBUTE_UNUSED,
6d3351
+                          virObjectPtr *obj)
6d3351
+{
6d3351
+    qemuDomainSaveCookiePtr cookie = NULL;
6d3351
+
6d3351
+    if (qemuDomainInitialize() < 0)
6d3351
+        goto error;
6d3351
+
6d3351
+    if (!(cookie = virObjectNew(qemuDomainSaveCookieClass)))
6d3351
+        goto error;
6d3351
+
6d3351
+    *obj = (virObjectPtr) cookie;
6d3351
+    return 0;
6d3351
+
6d3351
+ error:
6d3351
+    virObjectUnref(cookie);
6d3351
+    return -1;
6d3351
+}
6d3351
+
6d3351
+
6d3351
+static int
6d3351
+qemuDomainSaveCookieFormat(virBufferPtr buf ATTRIBUTE_UNUSED,
6d3351
+                           virObjectPtr obj ATTRIBUTE_UNUSED)
6d3351
+{
6d3351
+    return 0;
6d3351
+}
6d3351
+
6d3351
+
6d3351
+virSaveCookieCallbacks virQEMUDriverDomainSaveCookie = {
6d3351
+    .parse = qemuDomainSaveCookieParse,
6d3351
+    .format = qemuDomainSaveCookieFormat,
6d3351
+};
6d3351
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
6d3351
index 4db92fac8a..80d80e4554 100644
6d3351
--- a/src/qemu/qemu_domain.h
6d3351
+++ b/src/qemu/qemu_domain.h
6d3351
@@ -416,6 +416,14 @@ struct qemuProcessEvent {
6d3351
 typedef struct _qemuDomainLogContext qemuDomainLogContext;
6d3351
 typedef qemuDomainLogContext *qemuDomainLogContextPtr;
6d3351
 
6d3351
+typedef struct _qemuDomainSaveCookie qemuDomainSaveCookie;
6d3351
+typedef qemuDomainSaveCookie *qemuDomainSaveCookiePtr;
6d3351
+struct _qemuDomainSaveCookie {
6d3351
+    virObject parent;
6d3351
+};
6d3351
+
6d3351
+qemuDomainSaveCookiePtr qemuDomainSaveCookieNew(virDomainObjPtr vm);
6d3351
+
6d3351
 const char *qemuDomainAsyncJobPhaseToString(qemuDomainAsyncJob job,
6d3351
                                             int phase);
6d3351
 int qemuDomainAsyncJobPhaseFromString(qemuDomainAsyncJob job,
6d3351
@@ -640,6 +648,7 @@ extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
6d3351
 extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
6d3351
 extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
6d3351
 extern virDomainABIStability virQEMUDriverDomainABIStability;
6d3351
+extern virSaveCookieCallbacks virQEMUDriverDomainSaveCookie;
6d3351
 
6d3351
 int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
6d3351
                                virDomainObjPtr vm, int asyncJob);
6d3351
-- 
6d3351
2.13.1
6d3351