Skip to content

virtio-net: iovec handling cleanup

Michael S. Tsirkin qemu-devel 2 versions – New

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest14 patches 0 repliesNew
  2. v114 patches 9 repliesSuperseded

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/14virtio-net: track host/guest header lengthhw/virtio-net.c+17 -120 replies
2/14iov: add const annotationiov.c iov.h+2 -20 replies
3/14iov: add iov_cpyiov.c iov.h+32 -00 replies
4/14virtio-net: avoid sg copyhw/virtio-net.c+23 -250 replies
5/14virtio-net: use safe iov operations for rxhw/virtio-net.c+14 -110 replies
6/14virtio-net: refactor receive_hdrhw/virtio-net.c+7 -110 replies
7/14virtio-net: first s/g is always at start of bufhw/virtio-net.c+3 -20 replies
8/14virtio-net: switch tx to safe iov functionshw/virtio-net.c+19 -120 replies
9/14virtio-net: simplify rx codehw/virtio-net.c+2 -70 replies
10/14virtio: don't mark unaccessed memory as dirtyhw/virtio.c+1 -10 replies
11/14virtio-net: fix used len for txhw/virtio-net.c+2 -20 replies
12/14virtio-net: minor code simplificationhw/virtio-net.c+1 -30 replies
13/14virtio-net: test peer header support at init timehw/virtio-net.c+14 -90 replies
14/14virtio-net: enable mrg buf header in tap on linuxhw/vhost_net.c hw/virtio-net.c+18 -210 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [Qemu-devel] [PATCHv2 00/14] virtio-net: iovec handling cleanup

virtio net is using lots of manual mangling of iovecs;
I don't see any obvious crashes but it does look scary since guest can manipulate iovecs. This patchset changes it to use iov_* functions which are safer.

On a recent linux kernel, new code will actually do less iovec processing because it is able to utilize support for mergeable buffer header size added in tun/tap in linux 2.6.35 - though I was unable to measure any speed difference.

This also removes the restriction on buffer layout, aligning qemu with recent versions of virtio spec which imply that device should be prepared to handle e.g. virtio net header inline with the packet data in the same buffer.

Tsted on x86 kvm only for now, would appreciate cross-endianness etc testing/reports. This is also why I split this to so many small patches to make bisect easier in case of problems.

Changes from v1: address Anthony's comments
patches 3,5,8: rename iov_cpy -> iov_copy
patches 3,4 move hunk that landed in a wrong patch by mistake patch 4: move evil cast around so it's localized better

Michael S. Tsirkin (14):
virtio-net: track host/guest header length
iov: add const annotation
iov: add iov_cpy
virtio-net: avoid sg copy
virtio-net: use safe iov operations for rx
virtio-net: refactor receive_hdr
virtio-net: first s/g is always at start of buf
virtio-net: switch tx to safe iov functions
virtio-net: simplify rx code
virtio: don't mark unaccessed memory as dirty
virtio-net: fix used len for tx
virtio-net: minor code simplification
virtio-net: test peer header support at init time
virtio-net: enable mrg buf header in tap on linux

 hw/vhost_net.c  |  13 ----
 hw/virtio-net.c | 180 +++++++++++++++++++++++++++++++-------------------------
 hw/virtio.c     |   2 +-
 iov.c           |  25 +++++++-
 iov.h           |  11 +++-
 5 files changed, 134 insertions(+), 97 deletions(-)
Signature · 1 line
MST