Add mrg_rxbuf option to virtio interfaces

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
This commit is contained in:
Ján Tomko 2015-02-06 15:35:57 +01:00
parent e008a03324
commit 6067182b0d
4 changed files with 25 additions and 1 deletions

View File

@ -4012,7 +4012,7 @@ qemu-kvm -net nic,model=? /dev/null
&lt;target dev='vnet1'/&gt;
&lt;model type='virtio'/&gt;
<b>&lt;driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'&gt;
&lt;host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off'/&gt;
&lt;host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/&gt;
&lt;guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/&gt;
&lt;/driver&gt;
</b>
@ -4127,6 +4127,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>

View File

@ -2469,6 +2469,11 @@
<ref name="virOnOff"/>
</attribute>
</optional>
<optional>
<attribute name='mrg_rxbuf'>
<ref name="virOnOff"/>
</attribute>
</optional>
</element>
</optional>
<optional>

View File

@ -8066,6 +8066,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,
@ -17916,6 +17926,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)

View File

@ -938,6 +938,7 @@ struct _virDomainNetDef {
virTristateSwitch tso6;
virTristateSwitch ecn;
virTristateSwitch ufo;
virTristateSwitch mrg_rxbuf;
} host;
struct {
virTristateSwitch csum;