Blame SOURCES/libvirt-conf-Move-VFIO-AP-validation-from-post-parse-to-QEMU-validation-code.patch

9c6c51
From 680d10a61dfab864b5e1bca9e1f197ae06e62d87 Mon Sep 17 00:00:00 2001
9c6c51
Message-Id: <680d10a61dfab864b5e1bca9e1f197ae06e62d87@dist-git>
9c6c51
From: Erik Skultety <eskultet@redhat.com>
9c6c51
Date: Fri, 30 Nov 2018 15:49:26 +0100
9c6c51
Subject: [PATCH] conf: Move VFIO AP validation from post parse to QEMU
9c6c51
 validation code
9c6c51
9c6c51
VFIO AP has a limitation on a single device per domain, however, when
9c6c51
commit 11708641 added the support for vfio-ap, check for this limitation
9c6c51
was performed as part of the post parse code. Generally, checks like that
9c6c51
should be performed within the driver's validation callback to eliminate
9c6c51
any slight chance of failing in post parse, which could potentially
9c6c51
result in the domain XML config vanishing.
9c6c51
9c6c51
Signed-off-by: Erik Skultety <eskultet@redhat.com>
9c6c51
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
9c6c51
(cherry picked from commit 25dde373730545894f60ce5b1497f19d61714c69)
9c6c51
9c6c51
https://bugzilla.redhat.com/show_bug.cgi?id=1508146
9c6c51
9c6c51
Signed-off-by: Pino Toscano <ptoscano@redhat.com>
9c6c51
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
9c6c51
---
9c6c51
 src/conf/domain_conf.c | 28 ----------------------------
9c6c51
 src/qemu/qemu_domain.c | 28 +++++++++++++++++++++++++++-
9c6c51
 2 files changed, 27 insertions(+), 29 deletions(-)
9c6c51
9c6c51
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
9c6c51
index ea7152eb94..e013e9f0c5 100644
9c6c51
--- a/src/conf/domain_conf.c
9c6c51
+++ b/src/conf/domain_conf.c
9c6c51
@@ -4325,31 +4325,6 @@ virDomainDefPostParseGraphics(virDomainDef *def)
9c6c51
 }
9c6c51
 
9c6c51
 
9c6c51
-static int
9c6c51
-virDomainDefPostParseHostdev(virDomainDefPtr def)
9c6c51
-{
9c6c51
-    size_t i;
9c6c51
-    bool vfioap_found = false;
9c6c51
-
9c6c51
-    /* verify settings of hostdevs vfio-ap */
9c6c51
-    for (i = 0; i < def->nhostdevs; i++) {
9c6c51
-        virDomainHostdevDefPtr hostdev = def->hostdevs[i];
9c6c51
-
9c6c51
-        if (virHostdevIsMdevDevice(hostdev) &&
9c6c51
-            hostdev->source.subsys.u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_AP) {
9c6c51
-            if (vfioap_found) {
9c6c51
-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
9c6c51
-                               _("Only one hostdev of model vfio-ap is "
9c6c51
-                                 "supported"));
9c6c51
-                return -1;
9c6c51
-            }
9c6c51
-            vfioap_found = true;
9c6c51
-        }
9c6c51
-    }
9c6c51
-    return 0;
9c6c51
-}
9c6c51
-
9c6c51
-
9c6c51
 /**
9c6c51
  * virDomainDriveAddressIsUsedByDisk:
9c6c51
  * @def: domain definition containing the disks to check
9c6c51
@@ -5262,9 +5237,6 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
9c6c51
 
9c6c51
     virDomainDefPostParseGraphics(def);
9c6c51
 
9c6c51
-    if (virDomainDefPostParseHostdev(def) < 0)
9c6c51
-        return -1;
9c6c51
-
9c6c51
     if (virDomainDefPostParseCPU(def) < 0)
9c6c51
         return -1;
9c6c51
 
9c6c51
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
9c6c51
index 4898d58733..08f479fa1d 100644
9c6c51
--- a/src/qemu/qemu_domain.c
9c6c51
+++ b/src/qemu/qemu_domain.c
9c6c51
@@ -4486,6 +4486,32 @@ qemuDomainMdevDefVFIOPCIValidate(const virDomainHostdevSubsysMediatedDev *dev,
9c6c51
 }
9c6c51
 
9c6c51
 
9c6c51
+static int
9c6c51
+qemuDomainMdevDefVFIOAPValidate(const virDomainDef *def)
9c6c51
+{
9c6c51
+    size_t i;
9c6c51
+    bool vfioap_found = false;
9c6c51
+
9c6c51
+    /* VFIO-AP is restricted to a single mediated device only */
9c6c51
+    for (i = 0; i < def->nhostdevs; i++) {
9c6c51
+        virDomainHostdevDefPtr hostdev = def->hostdevs[i];
9c6c51
+
9c6c51
+        if (virHostdevIsMdevDevice(hostdev) &&
9c6c51
+            hostdev->source.subsys.u.mdev.model == VIR_MDEV_MODEL_TYPE_VFIO_AP) {
9c6c51
+            if (vfioap_found) {
9c6c51
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
9c6c51
+                               _("Only one hostdev of model vfio-ap is "
9c6c51
+                                 "supported"));
9c6c51
+                return -1;
9c6c51
+            }
9c6c51
+            vfioap_found = true;
9c6c51
+        }
9c6c51
+    }
9c6c51
+
9c6c51
+    return 0;
9c6c51
+}
9c6c51
+
9c6c51
+
9c6c51
 static int
9c6c51
 qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
9c6c51
                           const virDomainDef *def,
9c6c51
@@ -4495,7 +4521,7 @@ qemuDomainMdevDefValidate(const virDomainHostdevSubsysMediatedDev *mdevsrc,
9c6c51
     case VIR_MDEV_MODEL_TYPE_VFIO_PCI:
9c6c51
         return qemuDomainMdevDefVFIOPCIValidate(mdevsrc, def, qemuCaps);
9c6c51
     case VIR_MDEV_MODEL_TYPE_VFIO_AP:
9c6c51
-        break;
9c6c51
+        return qemuDomainMdevDefVFIOAPValidate(def);
9c6c51
     case VIR_MDEV_MODEL_TYPE_VFIO_CCW:
9c6c51
         break;
9c6c51
     case VIR_MDEV_MODEL_TYPE_LAST:
9c6c51
-- 
9c6c51
2.19.2
9c6c51