Thread (32 messages) 32 messages, 4 authors, 2024-07-01

Re: [PATCH net-next v6 07/10] virtio_net: xsk: rx: support fill with xsk buffer

From: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Date: 2024-07-01 08:34:37
Also in: bpf, virtualization

On Mon, 1 Jul 2024 11:05:33 +0800, Jason Wang [off-list ref] wrote:
On Fri, Jun 28, 2024 at 1:44 PM Xuan Zhuo [off-list ref] wrote:
quoted
On Fri, 28 Jun 2024 10:19:37 +0800, Jason Wang [off-list ref] wrote:
quoted
On Tue, Jun 18, 2024 at 3:57 PM Xuan Zhuo [off-list ref] wrote:
quoted
Implement the logic of filling rq with XSK buffers.

Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
---
 drivers/net/virtio_net.c | 68 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 66 insertions(+), 2 deletions(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 2bbc715f22c6..2ac5668a94ce 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -355,6 +355,8 @@ struct receive_queue {

                /* xdp rxq used by xsk */
                struct xdp_rxq_info xdp_rxq;
+
+               struct xdp_buff **xsk_buffs;
        } xsk;
 };
@@ -1032,6 +1034,53 @@ static void check_sq_full_and_disable(struct virtnet_info *vi,
        }
 }

+static void sg_fill_dma(struct scatterlist *sg, dma_addr_t addr, u32 len)
+{
+       sg->dma_address = addr;
+       sg->length = len;
+}
+
+static int virtnet_add_recvbuf_xsk(struct virtnet_info *vi, struct receive_queue *rq,
+                                  struct xsk_buff_pool *pool, gfp_t gfp)
+{
+       struct xdp_buff **xsk_buffs;
+       dma_addr_t addr;
+       u32 len, i;
+       int err = 0;
+       int num;
+
+       xsk_buffs = rq->xsk.xsk_buffs;
+
+       num = xsk_buff_alloc_batch(pool, xsk_buffs, rq->vq->num_free);
+       if (!num)
+               return -ENOMEM;
+
+       len = xsk_pool_get_rx_frame_size(pool) + vi->hdr_len;
+
+       for (i = 0; i < num; ++i) {
+               /* use the part of XDP_PACKET_HEADROOM as the virtnet hdr space */
+               addr = xsk_buff_xdp_get_dma(xsk_buffs[i]) - vi->hdr_len;
We had VIRTIO_XDP_HEADROOM, can we reuse it? Or if it's redundant
let's send a patch to switch to XDP_PACKET_HEADROOM.
Do you mean replace it inside the comment?
I meant a patch to s/VIRTIO_XDP_HEADROOM/XDP_PACKET_HEADROOM/g.
I see.

quoted
I want to describe use the headroom of xsk, the size of the headroom is
XDP_PACKET_HEADROOM.
quoted
Btw, the code assumes vi->hdr_len < xsk_pool_get_headroom(). It's
better to fail if it's not true when enabling xsk.
It is ok.
I mean do we need a check to fail xsk binding if vi->hdr_len >
xsk_pool_get_headroom() or it has been guaranteed by the code already.
YES.

Thanks.

Thanks
quoted
Thanks.

quoted
Thanks
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help