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