[libvirt] [PATCH 0/2] Support mrg_rxbuf attribute for virtio-net devices

For https://bugzilla.redhat.com/show_bug.cgi?id=1186886 Ján Tomko (2): Add mrg_rxbuf option to virtio interfaces Wire up mrg_rxbuf option for qemu docs/formatdomain.html.in | 6 +++++- docs/schemas/domaincommon.rng | 5 +++++ src/conf/domain_conf.c | 14 ++++++++++++++ src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 4 ++++ src/qemu/qemu_hotplug.c | 1 + .../qemuxml2argv-net-virtio-disable-offloads.args | 2 +- .../qemuxml2argv-net-virtio-disable-offloads.xml | 2 +- 8 files changed, 32 insertions(+), 3 deletions(-) -- 2.0.5

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

<interface ...> ... <model type='virtio'/> <driver ...> <host mrg_rxbuf='off'/> </driver> </interface> will result in: -device virtio-net-pci,mrg_rxbuf=off,... https://bugzilla.redhat.com/show_bug.cgi?id=1186886 --- src/qemu/qemu_command.c | 4 ++++ src/qemu/qemu_hotplug.c | 1 + tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args | 2 +- tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.xml | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 06a59d0..91af8a0 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4858,6 +4858,10 @@ qemuBuildNicDevStr(virDomainDefPtr def, virBufferAsprintf(&buf, ",host_ufo=%s", virTristateSwitchTypeToString(net->driver.virtio.host.ufo)); } + if (net->driver.virtio.host.mrg_rxbuf) { + virBufferAsprintf(&buf, ",mrg_rxbuf=%s", + virTristateSwitchTypeToString(net->driver.virtio.host.mrg_rxbuf)); + } if (net->driver.virtio.guest.csum) { virBufferAsprintf(&buf, ",guest_csum=%s", virTristateSwitchTypeToString(net->driver.virtio.guest.csum)); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 033b281..f1fdd3f 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2003,6 +2003,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver, olddev->driver.virtio.host.tso6 != newdev->driver.virtio.host.tso6 || olddev->driver.virtio.host.ecn != newdev->driver.virtio.host.ecn || olddev->driver.virtio.host.ufo != newdev->driver.virtio.host.ufo || + olddev->driver.virtio.host.mrg_rxbuf != newdev->driver.virtio.host.mrg_rxbuf || olddev->driver.virtio.guest.csum != newdev->driver.virtio.guest.csum || olddev->driver.virtio.guest.tso4 != newdev->driver.virtio.guest.tso4 || olddev->driver.virtio.guest.tso6 != newdev->driver.virtio.guest.tso6 || diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args index b7ce282..29cfaf7 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.args @@ -3,7 +3,7 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \ -hda /dev/HostVG/QEMUGuest7 \ -device virtio-net-pci,csum=off,gso=off,\ -host_tso4=off,host_tso6=off,host_ecn=off,host_ufo=off,\ +host_tso4=off,host_tso6=off,host_ecn=off,host_ufo=off,mrg_rxbuf=off,\ guest_csum=off,guest_tso4=off,guest_tso6=off,guest_ecn=off,guest_ufo=off,\ vlan=0,id=net0,mac=00:22:44:66:88:aa,bus=pci.0,addr=0x3 \ -net user,vlan=0,name=hostnet0 \ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.xml b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.xml index e368c43..f1be051 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-disable-offloads.xml @@ -26,7 +26,7 @@ <mac address='00:22:44:66:88:aa'/> <model type='virtio'/> <driver> - <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> </interface> -- 2.0.5

On 02/06/2015 09:51 AM, Ján Tomko wrote:
For https://bugzilla.redhat.com/show_bug.cgi?id=1186886
Ján Tomko (2): Add mrg_rxbuf option to virtio interfaces Wire up mrg_rxbuf option for qemu
docs/formatdomain.html.in | 6 +++++- docs/schemas/domaincommon.rng | 5 +++++ src/conf/domain_conf.c | 14 ++++++++++++++ src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 4 ++++ src/qemu/qemu_hotplug.c | 1 + .../qemuxml2argv-net-virtio-disable-offloads.args | 2 +- .../qemuxml2argv-net-virtio-disable-offloads.xml | 2 +- 8 files changed, 32 insertions(+), 3 deletions(-)
ACK series John
participants (2)
-
John Ferlan
-
Ján Tomko