Tested this series of patches with virtio-net regression tests,
everything works fine.
Tested-by: Lei Yang <leiyang@redhat.com>
On Mon, Sep 22, 2025 at 10:21 PM Paolo Abeni <pabeni@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 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
>
> --
> 2.51.0
>
>