[libvirt] [PATCH 6/9] conf: extract ignoring of inactive vcpu pinning information

Peter Krempa pkrempa at redhat.com
Wed Feb 24 14:22:54 UTC 2016


Introduce VIR_DOMAIN_DEF_FEATURE_OFFLINE_CPUPIN domain feature flag
whcih will allow to skip ignoring of the pinning information for
hypervisor drivers which will want to implement forward-pinning of
vcpus.
---
 src/conf/domain_conf.c | 28 +++++++++++++++++++++++-----
 src/conf/domain_conf.h |  1 +
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 101fae2..4220448 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -4215,6 +4215,25 @@ virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
 }


+static void
+virDomainDefRemoveOfflineVcpuPin(virDomainDefPtr def)
+{
+    size_t i;
+    virDomainVcpuInfoPtr vcpu;
+
+    for (i = 0; i < virDomainDefGetVcpusMax(def); i++) {
+        vcpu = virDomainDefGetVcpu(def, i);
+
+        if (!vcpu->online && vcpu->cpumask) {
+            virBitmapFree(vcpu->cpumask);
+            vcpu->cpumask = NULL;
+
+            VIR_WARN("Ignoring unsupported vcpupin for offline vcpu '%zu'", i);
+        }
+    }
+}
+
+
 #define UNSUPPORTED(FEATURE) (!((FEATURE) & xmlopt->config.features))
 /**
  * virDomainDefPostParseCheckFeatures:
@@ -4235,6 +4254,9 @@ virDomainDefPostParseCheckFeatures(virDomainDefPtr def,
         virDomainDefCheckUnsupportedMemoryHotplug(def) < 0)
         return -1;

+    if (UNSUPPORTED(VIR_DOMAIN_DEF_FEATURE_OFFLINE_CPUPIN))
+        virDomainDefRemoveOfflineVcpuPin(def);
+
     return 0;
 }

@@ -14216,11 +14238,7 @@ virDomainVcpuPinDefParseXML(virDomainDefPtr def,
     }
     VIR_FREE(tmp);

-    if (!(vcpu = virDomainDefGetVcpu(def, vcpuid)) ||
-        !vcpu->online) {
-        /* To avoid the regression when daemon loading domain confs, we can't
-         * simply error out if <vcpupin> nodes greater than current vcpus.
-         * Ignore them instead. */
+    if (!(vcpu = virDomainDefGetVcpu(def, vcpuid))) {
         VIR_WARN("Ignoring vcpupin for missing vcpus");
         ret = 0;
         goto cleanup;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index c660a02..44a92d3 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2406,6 +2406,7 @@ typedef bool (*virDomainObjListACLFilter)(virConnectPtr conn,
 typedef enum {
     VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI = (1 << 0),
     VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG = (1 << 1),
+    VIR_DOMAIN_DEF_FEATURE_OFFLINE_CPUPIN = (1 << 2),
 } virDomainDefFeatures;


-- 
2.6.2




More information about the libvir-list mailing list