在 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.
Thanks.
Thanks
alloc_frag->offset += hole;
}