Tested this series of patches with virtio-net regression cases, everything works fine.
Tested-by: Lei Yang <leiy...@redhat.com> On Wed, Aug 13, 2025 at 6:30 PM Paolo Abeni <pab...@redhat.com> wrote: > > 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 after that hw_compat_10_1 will be added, together > with the related compatiblity entries. > > Based-on: > 9d71108d7de139dd4f4e6efe6837cabb32bf5616.1755078918.git.pab...@redhat.com > --- > 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 (13): > 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/vhost_net-stub.c | 8 +- > hw/net/vhost_net.c | 45 ++-- > hw/net/virtio-net.c | 215 ++++++++++++------ > 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 | 74 +++++- > 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 | 127 +++++++++++ > include/hw/virtio/virtio-net.h | 2 +- > include/hw/virtio/virtio-pci.h | 2 +- > include/hw/virtio/virtio.h | 11 +- > include/net/net.h | 5 + > 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 | 12 +- > net/tap-bsd.c | 5 + > net/tap-linux.c | 17 ++ > net/tap-linux.h | 9 + > net/tap-solaris.c | 5 + > net/tap-stub.c | 5 + > net/tap.c | 13 ++ > net/tap_int.h | 1 + > qapi/virtio.json | 9 +- > scripts/update-linux-headers.sh | 1 + > 58 files changed, 1136 insertions(+), 242 deletions(-) > create mode 100644 include/hw/virtio/virtio-features.h > > -- > 2.50.1 > >