I don't have any guests with PAGE_SIZE > 64k but the code seems to be clearly broken in that case as PAGE_SIZE / MERGEABLE_BUFFER_ALIGN will need more than 8 bit and so the code in mergeable_ctx_to_buf_address does not give us the actual true size. Cc: John Fastabend <john.fastabend at gmail.com> Signed-off-by: Michael S. Tsirkin <mst at redhat.com> --- changes from v1: fix build warnings drivers/net/virtio_net.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 4a10500..4dc373b 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -48,8 +48,16 @@ module_param(gso, bool, 0444); */ DECLARE_EWMA(pkt_len, 1, 64) +/* With mergeable buffers we align buffer address and use the low bits to + * encode its true size. Buffer size is up to 1 page so we need to align to + * square root of page size to ensure we reserve enough bits to encode the true + * size. + */ +#define MERGEABLE_BUFFER_MIN_ALIGN_SHIFT ((PAGE_SHIFT + 1) / 2) + /* Minimum alignment for mergeable packet buffers. */ -#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, 256) +#define MERGEABLE_BUFFER_ALIGN max(L1_CACHE_BYTES, \ + 1 << MERGEABLE_BUFFER_MIN_ALIGN_SHIFT) #define VIRTNET_DRIVER_VERSION "1.0.0" -- MST
From: "Michael S. Tsirkin" <mst at redhat.com> Date: Mon, 23 Jan 2017 21:37:52 +0200> I don't have any guests with PAGE_SIZE > 64k but the > code seems to be clearly broken in that case > as PAGE_SIZE / MERGEABLE_BUFFER_ALIGN will need > more than 8 bit and so the code in mergeable_ctx_to_buf_address > does not give us the actual true size. > > Cc: John Fastabend <john.fastabend at gmail.com> > Signed-off-by: Michael S. Tsirkin <mst at redhat.com>Applied, thanks Michael. I am really trying to be patient, but we are about to run out of time for fixing the adjust header XDP stuff. That should have been resolved in a week or two, but now we're basically a month or so later. Please come to some kind of agreement about how to implement this because we can't let v4.10 go out without this being resolved. Thank you.
On Tue, Jan 24, 2017 at 02:42:27PM -0500, David Miller wrote:> From: "Michael S. Tsirkin" <mst at redhat.com> > Date: Mon, 23 Jan 2017 21:37:52 +0200 > > > I don't have any guests with PAGE_SIZE > 64k but the > > code seems to be clearly broken in that case > > as PAGE_SIZE / MERGEABLE_BUFFER_ALIGN will need > > more than 8 bit and so the code in mergeable_ctx_to_buf_address > > does not give us the actual true size. > > > > Cc: John Fastabend <john.fastabend at gmail.com> > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com> > > Applied, thanks Michael. > > I am really trying to be patient, but we are about to run out of > time for fixing the adjust header XDP stuff. > > That should have been resolved in a week or two, but now we're > basically a month or so later. > > Please come to some kind of agreement about how to implement this > because we can't let v4.10 go out without this being resolved. > > Thank you.I didn't realise. Why can't we? I thought that adjust_header is an optional feature that userspace can test for, so no rush. -- MST