virtio_net: introduce api to enable/disable premapped mode for sq
From: | Xuan Zhuo <xuanzhuo-AT-linux.alibaba.com> | |
To: | virtualization-AT-lists.linux.dev | |
Subject: | [PATCH vhost 0/5] virtio_net: introduce api to enable/disable premapped mode for sq | |
Date: | Wed, 08 May 2024 10:23:26 +0800 | |
Message-ID: | <20240508022331.63751-1-xuanzhuo@linux.alibaba.com> | |
Cc: | "Michael S. Tsirkin" <mst-AT-redhat.com>, Jason Wang <jasowang-AT-redhat.com>, Xuan Zhuo <xuanzhuo-AT-linux.alibaba.com>, "David S. Miller" <davem-AT-davemloft.net>, Eric Dumazet <edumazet-AT-google.com>, Jakub Kicinski <kuba-AT-kernel.org>, Paolo Abeni <pabeni-AT-redhat.com>, Alexei Starovoitov <ast-AT-kernel.org>, Daniel Borkmann <daniel-AT-iogearbox.net>, Jesper Dangaard Brouer <hawk-AT-kernel.org>, John Fastabend <john.fastabend-AT-gmail.com>, netdev-AT-vger.kernel.org, bpf-AT-vger.kernel.org | |
Archive-link: | Article |
As discussed: http://lore.kernel.org/all/CACGkMEvq0No8QGC46U4mGsMtuD44f... If virtio is in pre-mapped mode, the driver should manage the DMA info itself. However, due to the indirect feature, the virtio-net driver may need to maintain an excessive amount of DMA info. Therefore, we only enable pre-mapped mode for the send queue (SQ) when af-xdp is bound to it. We have set a limit on the amount of DMA info we manage. If the kernel stack or xdp tx/redirect attempts to use more descriptors than this limit, virtnet_add_outbuf() will return an -ENOMEM error. However, AF-XDP can continue working. The last patch aims to demonstrate the logic of enabling pre-mapped mode when af-xdp is bound to the SQ, and we can discuss it further. Although the APIs are not used, this patch might belong in the final patch set (virtio-net supports AF_XDP). But I hope the first four patches can be merged first to reduce the number of patches in the final set. Thanks. Xuan Zhuo (5): virtio_ring: introduce vring_need_unmap_buffer virtio_ring: introduce dma map api for page virtio_ring: introduce virtqueue_dma_map_sg_attrs virtio_ring: virtqueue_set_dma_premapped() support to disable virtio_net: sq support premapped mode drivers/net/virtio_net.c | 212 ++++++++++++++++++++++++++++++++++- drivers/virtio/virtio_ring.c | 118 ++++++++++++++++--- include/linux/virtio.h | 12 +- 3 files changed, 319 insertions(+), 23 deletions(-) -- 2.32.0.3.g01195cf9f