]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
ch_domain: add methods to manage private vcpu data
authorVineeth Pillai <viremana@linux.microsoft.com>
Fri, 10 Dec 2021 20:34:38 +0000 (20:34 +0000)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 6 Jan 2022 15:03:55 +0000 (16:03 +0100)
Signed-off-by: Vineeth Pillai <viremana@linux.microsoft.com>
Signed-off-by: Praveen K Paladugu <prapal@linux.microsoft.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/ch/ch_domain.c
src/ch/ch_domain.h

index bf4ce835959271eba7d6236161acb37dcbb82d8c..761cd15c566817689b49797916ce89778802e5c3 100644 (file)
@@ -164,11 +164,6 @@ virCHDomainObjPrivateFree(void *data)
     g_free(priv);
 }
 
-virDomainXMLPrivateDataCallbacks virCHDriverPrivateDataCallbacks = {
-    .alloc = virCHDomainObjPrivateAlloc,
-    .free = virCHDomainObjPrivateFree,
-};
-
 static int
 virCHDomainDefPostParseBasic(virDomainDef *def,
                              void *opaque G_GNUC_UNUSED)
@@ -185,6 +180,39 @@ virCHDomainDefPostParseBasic(virDomainDef *def,
     return 0;
 }
 
+static virClass *virCHDomainVcpuPrivateClass;
+
+static void
+virCHDomainVcpuPrivateDispose(void *obj G_GNUC_UNUSED)
+{
+}
+
+static int
+virCHDomainVcpuPrivateOnceInit(void)
+{
+    if (!VIR_CLASS_NEW(virCHDomainVcpuPrivate, virClassForObject()))
+        return -1;
+
+    return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(virCHDomainVcpuPrivate);
+
+static virObject *
+virCHDomainVcpuPrivateNew(void)
+{
+    virCHDomainVcpuPrivate *priv;
+
+    if (virCHDomainVcpuPrivateInitialize() < 0)
+        return NULL;
+
+    if (!(priv = virObjectNew(virCHDomainVcpuPrivateClass)))
+        return NULL;
+
+    return (virObject *) priv;
+}
+
+
 static int
 virCHDomainDefPostParse(virDomainDef *def,
                         unsigned int parseFlags G_GNUC_UNUSED,
@@ -203,6 +231,12 @@ virCHDomainDefPostParse(virDomainDef *def,
     return 0;
 }
 
+virDomainXMLPrivateDataCallbacks virCHDriverPrivateDataCallbacks = {
+    .alloc = virCHDomainObjPrivateAlloc,
+    .free = virCHDomainObjPrivateFree,
+    .vcpuNew = virCHDomainVcpuPrivateNew,
+};
+
 static int
 chValidateDomainDeviceDef(const virDomainDeviceDef *dev,
                           const virDomainDef *def G_GNUC_UNUSED,
index c053b25c651a3ee36fed12e5779a6ebedcb8f9b6..f01c0e5ad06f355fe336e621b5bbd662ab1e6668 100644 (file)
@@ -62,6 +62,17 @@ struct _virCHDomainObjPrivate {
 
 virCHMonitor *virCHDomainGetMonitor(virDomainObj *vm);
 
+typedef struct _virCHDomainVcpuPrivate virCHDomainVcpuPrivate;
+struct _virCHDomainVcpuPrivate {
+    virObject parent;
+
+    pid_t tid; /* vcpu thread id */
+    virTristateBool halted;
+};
+
+#define CH_DOMAIN_VCPU_PRIVATE(vcpu) \
+    ((virCHDomainVcpuPrivate *) (vcpu)->privateData)
+
 extern virDomainXMLPrivateDataCallbacks virCHDriverPrivateDataCallbacks;
 extern virDomainDefParserConfig virCHDriverDomainDefParserConfig;