Skip to content

virtio: introduce support for GSO over UDP tunnel

Paolo Abeni qemu-devel 14 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v7 Latest posting 2/214 patches 2 repliesIn review
  2. v6 posting 2/214 patches 19 repliesSuperseded
  3. v5 posting 3/313 patches 9 repliesSuperseded
Earlier versions · 11
VersionPostedPatchesRepliesStatus
v5 posting 2/31 patch3 repliesSuperseded
v4 RFC posting 2/214 patches10 repliesSuperseded
v3 RFC posting 2/213 patches40 repliesSuperseded
v2 RFC posting 2/213 patches23 repliesSuperseded
v7 posting 1/29 patches8 repliesSuperseded 8 of 9 applied
v6 posting 1/29 patches9 repliesSuperseded
v5 posting 1/39 patches3 repliesSuperseded
v4 posting 1/28 patches30 repliesSuperseded
v3 RFC posting 1/28 patches28 repliesSuperseded
v2 RFC posting 1/28 patches8 repliesSuperseded
v1 RFC16 patches25 repliesSuperseded

Changes in v7 from the cover letter

- collected more acks
- fixed a few types in commit message and description string

Patches in v7 posting 2/2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/14net: bundle all offloads in a single structhw/net/e1000e_core.c hw/net/igb_core.c hw/net/virtio-net.c +10 more+59 -490 replies
2/14linux-headers: deal with counted_by annotationscripts/update-linux-headers.sh+1 -00 replies
3/14linux-headers: Update to Linux v6.17-rc1include/standard-headers/drm/drm_fourcc.h include/standard-headers/linux/ethtool.h include/standard-headers/linux/input-event-codes.h +26 more+352 -270 replies
4/14virtio: introduce extended features typeinclude/hw/virtio/virtio-features.h include/hw/virtio/virtio.h+130 -30 replies
5/14virtio: serialize extended features statehw/virtio/virtio.c+57 -310 replies
6/14virtio: add support for negotiating extended featureshw/virtio/virtio-bus.c hw/virtio/virtio.c include/hw/virtio/virtio.h+23 -60 replies
7/14virtio-pci: implement support for extended featureshw/virtio/virtio-pci.c include/hw/virtio/virtio-pci.h+68 -100 replies
8/14vhost: add support for negotiating extended featureshw/virtio/vhost.c include/hw/virtio/vhost-backend.h include/hw/virtio/vhost.h+103 -270 replies
9/14qmp: update virtio features map to support extended featureshw/virtio/virtio-hmp-cmds.c hw/virtio/virtio-qmp.c hw/virtio/virtio-qmp.h +1 more+74 -320 replies
10/14vhost-backend: implement extended features supporthw/virtio/vhost-backend.c+51 -110 replies
11/14vhost-net: implement extended features supporthw/net/vhost_net-stub.c hw/net/vhost_net.c include/net/vhost_net.h+58 -280 replies
12/14virtio-net: implement extended features supporthw/net/virtio-net.c include/hw/virtio/virtio-net.h+83 -590 replies
13/14net: implement tunnel probinghw/net/virtio-net.c include/net/net.h net/net.c +7 more+100 -00 replies
14/14net: implement UDP tunnel features offloadinghw/net/virtio-net.c include/net/net.h net/net.c +2 more+38 -90 replies

Reviews trailers per patch

13 of 14 patches have a Reviewed-by or Acked-by.

PatchAkihiko OdakiJason WangStefano GarzarellaMarkus ArmbrusterLei Yang
SeriesT-b
1/14
2/14R-b A-b A-b
3/14R-b A-b
4/14R-b A-b A-b
5/14R-b A-b A-b
6/14R-b A-b A-b
7/14R-b A-b A-b
8/14R-b A-b A-b
9/14R-b A-b A-b A-b
10/14R-b A-b A-b
11/14R-b A-b
12/14R-b A-b
13/14R-b A-b
14/14R-b A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 5 reviewers.

Read the v7 thread

Cover letter [PATCH v7 00/14] virtio: introduce support for GSO over UDP tunnel

Some virtualized deployments use UDP tunnel pervasively and are impacted negatively by the lack of GSO support for such kind of traffic in the virtual NIC driver.

The virtio_net specification recently introduced support for GSO over UDP tunnel, and the kernel side of the implementation has been merged into the net-next tree; this series updates the virtio implementation to support such a feature.

Currently the qemu virtio support limits the feature space to 64 bits, while the virtio specification allows for a larger number of features. Specifically the GSO-over-UDP-tunnel-related virtio features use bits 65-69; the larger part of this series (patches 4-12) actually deals with extending the features space.

The extended features are carried by fixed size uint64_t arrays, bringing the current maximum features number to 128.

The patches use some syntactic sugar to try to minimize the otherwise very large code churn. Specifically the extended features are boundled in an union with 'legacy' features definition, allowing no changes in the virtio devices not needing the extended features set.

The actual offload implementation is in patches 13 and 14 and boils down to propagating the new offload to the tun devices and the vhost backend.

Patch 1 is a small pre-req refactor that ideally could enter the tree separately; it's presented here in the same series to help reviewers more easily getting the full picture, patch 2 updates to linux headers update script to deal with annotations recently introduce in the kernel and patch 3 is a needed linux headers update.

Tested with basic stream transfer with all the possible permutations of host kernel/qemu/guest kernel with/without GSO over UDP tunnel support, vs snapshots creation and restore and vs migration.

The new features are disabled by default to avoid compatibilty issues. They could be enabled with a later patch, together with the related compatiblity entries.
---
v6 -> v7:
- collected more acks
- fixed a few types in commit message and description string

v6: https://lists.gnu.org/archive/html/qemu-devel/2025-09/msg02411.html

v5 -> v6:
- colleted ack-by/reviewed-by tags
- re-included pre-req patch as per Michael's request
- minor checkpatch and whitestaces fixes

v5: https://lists.gnu.org/archive/html/qemu-devel/2025-08/msg02005.html

v4 -> v5:
- more sparse cleanup
- dropped RFC tag
- disable the new features by default

v4: https://lists.gnu.org/archive/html/qemu-devel/2025-07/msg05513.html

v3 -> v4:
- more sparse cleanups
- fix build failures on a couple of targets
v3: https://lists.gnu.org/archive/html/qemu-devel/2025-07/msg04872.html

v2 -> v3:
- consolidated suffixes for new fields to '_ex'
- avoid pre/post load trickery and relay on reset zeroing the features
- cleaned-up virtio store implementation deduplicating a bit of code
- many more cleanups, see the individual patches changelog for the details
- I left patch 1 unmodified, still some hope we could live with that;)
v2: https://lists.gnu.org/archive/html/qemu-devel/2025-07/msg03000.html

Paolo Abeni (14):
net: bundle all offloads in a single struct
linux-headers: deal with counted_by annotation
linux-headers: Update to Linux v6.17-rc1
virtio: introduce extended features type
virtio: serialize extended features state
virtio: add support for negotiating extended features
virtio-pci: implement support for extended features
vhost: add support for negotiating extended features
qmp: update virtio features map to support extended features
vhost-backend: implement extended features support
vhost-net: implement extended features support
virtio-net: implement extended features support
net: implement tunnel probing
net: implement UDP tunnel features offloading

 hw/net/e1000e_core.c                          |   5 +-
 hw/net/igb_core.c                             |   5 +-
 hw/net/vhost_net-stub.c                       |   8 +-
 hw/net/vhost_net.c                            |  45 ++--
 hw/net/virtio-net.c                           | 234 ++++++++++++------
 hw/net/vmxnet3.c                              |  13 +-
 hw/virtio/vhost-backend.c                     |  62 ++++-
 hw/virtio/vhost.c                             |  68 +++--
 hw/virtio/virtio-bus.c                        |  11 +-
 hw/virtio/virtio-hmp-cmds.c                   |   3 +-
 hw/virtio/virtio-pci.c                        |  76 +++++-
 hw/virtio/virtio-qmp.c                        |  91 ++++---
 hw/virtio/virtio-qmp.h                        |   3 +-
 hw/virtio/virtio.c                            | 100 +++++---
 include/hw/virtio/vhost-backend.h             |   6 +
 include/hw/virtio/vhost.h                     |  56 ++++-
 include/hw/virtio/virtio-features.h           | 126 ++++++++++
 include/hw/virtio/virtio-net.h                |   2 +-
 include/hw/virtio/virtio-pci.h                |   2 +-
 include/hw/virtio/virtio.h                    |  11 +-
 include/net/net.h                             |  20 +-
 include/net/vhost_net.h                       |  33 ++-
 include/standard-headers/drm/drm_fourcc.h     |  56 ++++-
 include/standard-headers/linux/ethtool.h      |   4 +-
 .../linux/input-event-codes.h                 |   8 +
 include/standard-headers/linux/input.h        |   1 +
 include/standard-headers/linux/pci_regs.h     |   9 +
 include/standard-headers/linux/vhost_types.h  |   5 +
 include/standard-headers/linux/virtio_net.h   |  33 +++
 linux-headers/LICENSES/preferred/GPL-2.0      |  10 +-
 linux-headers/asm-arm64/unistd_64.h           |   2 +
 linux-headers/asm-generic/unistd.h            |   8 +-
 linux-headers/asm-loongarch/unistd_64.h       |   2 +
 linux-headers/asm-mips/unistd_n32.h           |   2 +
 linux-headers/asm-mips/unistd_n64.h           |   2 +
 linux-headers/asm-mips/unistd_o32.h           |   2 +
 linux-headers/asm-powerpc/kvm.h               |  13 -
 linux-headers/asm-powerpc/unistd_32.h         |   2 +
 linux-headers/asm-powerpc/unistd_64.h         |   2 +
 linux-headers/asm-riscv/kvm.h                 |   1 +
 linux-headers/asm-riscv/unistd_32.h           |   2 +
 linux-headers/asm-riscv/unistd_64.h           |   2 +
 linux-headers/asm-s390/unistd_32.h            |   2 +
 linux-headers/asm-s390/unistd_64.h            |   2 +
 linux-headers/asm-x86/unistd_32.h             |   2 +
 linux-headers/asm-x86/unistd_64.h             |   2 +
 linux-headers/asm-x86/unistd_x32.h            |   2 +
 linux-headers/linux/iommufd.h                 | 154 +++++++++++-
 linux-headers/linux/kvm.h                     |   2 +
 linux-headers/linux/vfio.h                    |  12 +-
 linux-headers/linux/vhost.h                   |  35 +++
 net/net.c                                     |  17 +-
 net/netmap.c                                  |   3 +-
 net/tap-bsd.c                                 |   8 +-
 net/tap-linux.c                               |  38 ++-
 net/tap-linux.h                               |   9 +
 net/tap-solaris.c                             |   9 +-
 net/tap-stub.c                                |   8 +-
 net/tap.c                                     |  21 +-
 net/tap_int.h                                 |   5 +-
 qapi/virtio.json                              |   9 +-
 scripts/update-linux-headers.sh               |   1 +
 62 files changed, 1196 insertions(+), 291 deletions(-)
 create mode 100644 include/hw/virtio/virtio-features.h
Signature · 1 line
2.51.0