From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:47611) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGT2j-0000zd-QS for qemu-devel@nongnu.org; Tue, 25 Sep 2012 07:11:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TGT2Z-0002pH-FH for qemu-devel@nongnu.org; Tue, 25 Sep 2012 07:11:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:16606) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGT2Z-0002pC-5T for qemu-devel@nongnu.org; Tue, 25 Sep 2012 07:10:59 -0400 Date: Tue, 25 Sep 2012 13:12:02 +0200 From: "Michael S. Tsirkin" Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] [PATCHv2 00/14] virtio-net: iovec handling cleanup List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Jason Wang , Anthony Liguori , stefanha@linux.vnet.ibm.com, aurelien@aurel32.net 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(-) -- MST