Re: [net-next PATCH v2 3/5] virtio_net: Add XDP support
From: John Fastabend <john.fastabend@gmail.com>
Date: 2016-11-28 23:27:10
[...]
quoted
Perfect! hacking qemu for testing is no problem this helps a lot thanks and saves me time trying to figure out how to get qemu to do this.Pls note I didn't try this at all, so might not work, but should give you the idea.quoted
quoted
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index b68c69d..4866144 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c@@ -1164,6 +1164,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t offset = n->host_hdr_len; total += n->guest_hdr_len; guest_offset = n->guest_hdr_len; + continue; } else { guest_offset = 0; }here's one that should cap the 1st s/g to 100 bytes:diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index b68c69d..7943004 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c@@ -1164,6 +1164,7 @@ static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t offset = n->host_hdr_len; total += n->guest_hdr_len; guest_offset = n->guest_hdr_len; + sg.iov_len = MIN(sg.iov_len, 100); } else { guest_offset = 0; }
Here is the patch I went with, I'm using vhost=on:
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c@@ -1777,7 +1777,8 @@ static int translate_desc(struct vhost_virtqueue*vq, u64
_iov = iov + ret;
size = node->size - addr + node->start;
- _iov->iov_len = min((u64)len - s, size);
+ printk("%s: build 100 length headers!\n", __func__);
+ _iov->iov_len = min((u64)len - s, (u64)100);//size);
_iov->iov_base = (void __user *)(unsigned long)
(node->userspace_addr + addr - node->start);
s += size;
This seems to do the trick and with 100 I can use 'ping -s' to generate
as many bufs is needed up to MTU. The patch I have seems to be working
fine I'll let it run a bit and test it with some real traffic (not just
ping) then push out a v3 assuming I don't find any issues.
Thanks,
John