[libvirt] [PATCH 1/2] Add mrg_rxbuf option to virtio interfaces

Ján Tomko jtomko at redhat.com
Fri Feb 6 14:51:10 UTC 2015


Add an XML attribute to allow disabling merge of rx buffers
on the host:
<interface ...>
  ...
  <model type='virtio'/>
  <driver ...>
    <host mrg_rxbuf='off'/>
  </driver>
</interface>

https://bugzilla.redhat.com/show_bug.cgi?id=1186886
---
 docs/formatdomain.html.in     |  6 +++++-
 docs/schemas/domaincommon.rng |  5 +++++
 src/conf/domain_conf.c        | 14 ++++++++++++++
 src/conf/domain_conf.h        |  1 +
 4 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 679194f..96fb8de 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3998,7 +3998,7 @@ qemu-kvm -net nic,model=? /dev/null
       <target dev='vnet1'/>
       <model type='virtio'/>
       <b><driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'>
-        <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
+        <host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
         <guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
       </driver>
       </b>
@@ -4113,6 +4113,10 @@ qemu-kvm -net nic,model=? /dev/null
         and <code>off</code> can be used to turn off host offloading options.
         By default, the supported offloads are enabled by QEMU.
         <span class="since">Since 1.2.9 (QEMU only)</span>
+        The <code>mrg_rxbuf</code> attribute can be used to control
+        mergeable rx buffers on the host side. Possible values are
+        <code>on</code> (default) and <code>off</code>.
+        <span class="since">Since 1.2.13 (QEMU only)</span>
       </dd>
       <dt><code>guest</code> offloading options</dt>
       <dd>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index d467dce..bc4b088 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2425,6 +2425,11 @@
                     <ref name="virOnOff"/>
                   </attribute>
                 </optional>
+                <optional>
+                  <attribute name='mrg_rxbuf'>
+                    <ref name="virOnOff"/>
+                  </attribute>
+                </optional>
               </element>
             </optional>
             <optional>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index f0b715d..ef0eb3a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7944,6 +7944,16 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
             def->driver.virtio.host.ufo = val;
         }
         VIR_FREE(str);
+        if ((str = virXPathString("string(./driver/host/@mrg_rxbuf)", ctxt))) {
+            if ((val = virTristateSwitchTypeFromString(str)) <= 0) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("unknown host mrg_rxbuf mode '%s'"),
+                               str);
+                goto error;
+            }
+            def->driver.virtio.host.mrg_rxbuf = val;
+        }
+        VIR_FREE(str);
         if ((str = virXPathString("string(./driver/guest/@csum)", ctxt))) {
             if ((val = virTristateSwitchTypeFromString(str)) <= 0) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -17585,6 +17595,10 @@ virDomainVirtioNetHostOptsFormat(char **outstr,
         virBufferAsprintf(&buf, "ufo='%s' ",
                           virTristateSwitchTypeToString(def->driver.virtio.host.ufo));
     }
+    if (def->driver.virtio.host.mrg_rxbuf) {
+        virBufferAsprintf(&buf, "mrg_rxbuf='%s' ",
+                          virTristateSwitchTypeToString(def->driver.virtio.host.mrg_rxbuf));
+    }
     virBufferTrim(&buf, " ", -1);
 
     if (virBufferCheckError(&buf) < 0)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 93f2314..626901b 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -938,6 +938,7 @@ struct _virDomainNetDef {
                 virTristateSwitch tso6;
                 virTristateSwitch ecn;
                 virTristateSwitch ufo;
+                virTristateSwitch mrg_rxbuf;
             } host;
             struct {
                 virTristateSwitch csum;
-- 
2.0.5




More information about the libvir-list mailing list