在 2022/12/27 15:32, Heng Qi 写道:
在 2022/12/27 下午2:30, Jason Wang 写道:
在 2022/12/20 22:14, Heng Qi 写道:
XDP core assumes that the frame_size of xdp_buff and the length of
the frag are PAGE_SIZE. The hole may cause the processing of xdp to
fail, so we disable the hole mechanism when xdp is set.
Signed-off-by: Heng Qi <hengqi@xxxxxxxxxxxxxxxxx>
Reviewed-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx>
---
drivers/net/virtio_net.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 9cce7dec7366..443aa7b8f0ad 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1419,8 +1419,11 @@ static int add_recvbuf_mergeable(struct
virtnet_info *vi,
/* To avoid internal fragmentation, if there is very
likely not
* enough space for another buffer, add the remaining
space to
* the current buffer.
+ * XDP core assumes that frame_size of xdp_buff and the length
+ * of the frag are PAGE_SIZE, so we disable the hole
mechanism.
*/
- len += hole;
+ if (!headroom)
+ len += hole;
Is this only a requirement of multi-buffer XDP? If not, it need to be
backported to stable.
It applies to single buffer xdp and multi-buffer xdp, but even if
single buffer xdp has a hole
mechanism, there will be no problem (limiting mtu and turning off
GUEST GSO), so there is
no need to backport it.
Let's add this in the changelog.
With that,
Acked-by: Jason Wang <jasowang@xxxxxxxxxx>
Thanks
Thanks.
Thanks
alloc_frag->offset += hole;
}