[PATCH v2 2/4] conf: domain: support for virtio packed option

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

 



Expose the virtio parameter for packed virtqueues as an optional libvirt
XML attribute to virtio-backed devices, e.g.:

    <interface type='user'>
      <mac address='00:11:22:33:44:55'/>
      <model type='virtio'/>
      <driver packed='on'/>
    </interface>

If the attribute is omitted, the default value for this attribute is 'off' and
regular split virtqueues are used.

Reviewed-by: Ján Tomko <jtomko@xxxxxxxxxx>
Reviewed-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx>
Signed-off-by: Bjoern Walk <bwalk@xxxxxxxxxxxxx>
---
 docs/schemas/domaincommon.rng |  5 +++++
 src/conf/domain_conf.c        | 28 ++++++++++++++++++++++++++++
 src/conf/domain_conf.h        |  1 +
 3 files changed, 34 insertions(+)

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index dcf2e09d..12e842ce 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -5961,6 +5961,11 @@
         <ref name="virOnOff"/>
       </attribute>
     </optional>
+    <optional>
+      <attribute name="packed">
+        <ref name="virOnOff"/>
+      </attribute>
+    </optional>
   </define>
 
   <define name="usbmaster">
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 460f8064..51fd5f15 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1513,6 +1513,16 @@ virDomainVirtioOptionsParseXML(xmlNodePtr driver,
         }
         res->ats = val;
     }
+    VIR_FREE(str);
+
+    if ((str = virXMLPropString(driver, "packed"))) {
+        if ((val = virTristateSwitchTypeFromString(str)) <= 0) {
+            virReportError(VIR_ERR_XML_ERROR, "%s",
+                           _("invalid packed value"));
+            return -1;
+        }
+        res->packed = val;
+    }
 
     return 0;
 }
@@ -5092,6 +5102,12 @@ virDomainCheckVirtioOptions(virDomainVirtioOptionsPtr virtio)
                          "for virtio devices"));
         return -1;
     }
+    if (virtio->packed != VIR_TRISTATE_SWITCH_ABSENT) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("packed driver option is only supported "
+                         "for virtio devices"));
+        return -1;
+    }
     return 0;
 }
 
@@ -7378,6 +7394,10 @@ virDomainVirtioOptionsFormat(virBufferPtr buf,
         virBufferAsprintf(buf, " ats='%s'",
                           virTristateSwitchTypeToString(virtio->ats));
     }
+    if (virtio->packed != VIR_TRISTATE_SWITCH_ABSENT) {
+        virBufferAsprintf(buf, " packed='%s'",
+                          virTristateSwitchTypeToString(virtio->packed));
+    }
 }
 
 
@@ -22416,6 +22436,14 @@ virDomainVirtioOptionsCheckABIStability(virDomainVirtioOptionsPtr src,
                        virTristateSwitchTypeToString(src->ats));
         return false;
     }
+    if (src->packed != dst->packed) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Target device packed option '%s' does not "
+                         "match source '%s'"),
+                       virTristateSwitchTypeToString(dst->packed),
+                       virTristateSwitchTypeToString(src->packed));
+        return false;
+    }
     return true;
 }
 
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 2038b54c..22f6990e 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2417,6 +2417,7 @@ struct _virDomainVsockDef {
 struct _virDomainVirtioOptions {
     virTristateSwitch iommu;
     virTristateSwitch ats;
+    virTristateSwitch packed;
 };
 
 /*
-- 
2.24.1






[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]

  Powered by Linux