[PATCH v3 7/9] domain: Introduce virDomainIOThreadsPin{Add|Del}

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



https://bugzilla.redhat.com/show_bug.cgi?id=1135491

More or less a virtual copy of the existing virDomainVcpuPin{Add|Del} API's.

NB: The IOThreads implementation "reused" the virDomainVcpuPinDefPtr
since it provided everything necessary - an "id" and a "map" for each
thread id configured.

Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx>
---
 src/conf/domain_conf.c   | 64 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/conf/domain_conf.h   | 10 ++++++++
 src/libvirt_private.syms |  2 ++
 3 files changed, 76 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b13cae8..3892096 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16664,6 +16664,70 @@ virDomainEmulatorPinDel(virDomainDefPtr def)
     return 0;
 }
 
+int
+virDomainIOThreadsPinAdd(virDomainVcpuPinDefPtr **iothreadspin_list,
+                         size_t *niothreadspin,
+                         unsigned char *cpumap,
+                         int maplen,
+                         int iothread_val)
+{
+    /* IOThreads share the virDomainVcpuPinDefPtr */
+    virDomainVcpuPinDefPtr iothreadpin = NULL;
+
+    if (!iothreadspin_list)
+        return -1;
+
+    iothreadpin = virDomainVcpuPinFindByVcpu(*iothreadspin_list,
+                                             *niothreadspin,
+                                             iothread_val);
+    if (iothreadpin) {
+        iothreadpin->vcpuid = iothread_val;
+        virBitmapFree(iothreadpin->cpumask);
+        iothreadpin->cpumask = virBitmapNewData(cpumap, maplen);
+        if (!iothreadpin->cpumask)
+            return -1;
+
+        return 0;
+    }
+
+    /* No existing iothreadpin matches iothread_val, adding a new one */
+
+    if (VIR_ALLOC(iothreadpin) < 0)
+        goto error;
+
+    iothreadpin->vcpuid = iothread_val;
+    iothreadpin->cpumask = virBitmapNewData(cpumap, maplen);
+    if (!iothreadpin->cpumask)
+        goto error;
+
+    if (VIR_APPEND_ELEMENT(*iothreadspin_list, *niothreadspin, iothreadpin) < 0)
+        goto error;
+
+    return 0;
+
+ error:
+    virDomainVcpuPinDefFree(iothreadpin);
+    return -1;
+}
+
+void
+virDomainIOThreadsPinDel(virDomainDefPtr def,
+                         int iothread_val)
+{
+    size_t i;
+    /* IOThreads share the virDomainVcpuPinDefPtr */
+    virDomainVcpuPinDefPtr *iothreadspin_list = def->cputune.iothreadspin;
+
+    for (i = 0; i < def->cputune.niothreadspin; i++) {
+        if (iothreadspin_list[i]->vcpuid == iothread_val) {
+            virBitmapFree(iothreadspin_list[i]->cpumask);
+            VIR_DELETE_ELEMENT(def->cputune.iothreadspin, i,
+                               def->cputune.niothreadspin);
+            return;
+        }
+    }
+}
+
 static int
 virDomainEventActionDefFormat(virBufferPtr buf,
                               int type,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 325afa8..81693e9 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2569,6 +2569,16 @@ int virDomainEmulatorPinAdd(virDomainDefPtr def,
 
 int virDomainEmulatorPinDel(virDomainDefPtr def);
 
+/* IOThreads share the virDomainVcpuPinDefPtr */
+int virDomainIOThreadsPinAdd(virDomainVcpuPinDefPtr **iothreadspin_list,
+                             size_t *niothreads,
+                             unsigned char *cpumap,
+                             int maplen,
+                             int iothread_val);
+
+void virDomainIOThreadsPinDel(virDomainDefPtr def,
+                              int iothread_val);
+
 void virDomainRNGDefFree(virDomainRNGDefPtr def);
 
 int virDomainDiskIndexByAddress(virDomainDefPtr def,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 46a1613..8d2b4de 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -306,6 +306,8 @@ virDomainHubTypeToString;
 virDomainHypervTypeFromString;
 virDomainHypervTypeToString;
 virDomainInputDefFree;
+virDomainIOThreadsPinAdd;
+virDomainIOThreadsPinDel;
 virDomainLeaseDefFree;
 virDomainLeaseIndex;
 virDomainLeaseInsert;
-- 
2.1.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]