mbox series

[net-next,v5,00/10] virtio-net: support multi buffer xdp

Message ID 20230114082229.62143-1-hengqi@linux.alibaba.com (mailing list archive)
Headers show
Series virtio-net: support multi buffer xdp | expand

Message

Heng Qi Jan. 14, 2023, 8:22 a.m. UTC
Changes since PATCH v4:
- Make netdev_warn() in [PATCH 2/10] independent from [PATCH 3/10].

Changes since PATCH v3:
- Separate fix patch [2/10] for MTU calculation of single buffer xdp.
  Note that this patch needs to be backported to the stable branch.

Changes since PATCH v2:
- 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 "[PATCH 1/9]";
- Modify calculation of MTU for single buffer xdp in virtnet_xdp_set();
- Make truesize in mergeable mode return to literal meaning;
- Add some comments for legibility;

Changes since RFC:
- Using headroom instead of vi->xdp_enabled to avoid re-reading
  in add_recvbuf_mergeable();
- Disable GRO_HW and keep linearization for single buffer xdp;
- Renamed to virtnet_build_xdp_buff_mrg();
- pr_debug() to netdev_dbg();
- Adjusted the order of the patch series.

Currently, virtio net only supports xdp for single-buffer packets
or linearized multi-buffer packets. This patchset supports xdp for
multi-buffer packets, then larger MTU can be used if xdp sets the
xdp.frags. This does not affect single buffer handling.

In order to build multi-buffer xdp neatly, we integrated the code
into virtnet_build_xdp_buff_mrg() for xdp. The first buffer is used
for prepared xdp buff, and the rest of the buffers are added to
its skb_shared_info structure. This structure can also be
conveniently converted during XDP_PASS to get the corresponding skb.

Since virtio net uses comp pages, and bpf_xdp_frags_increase_tail()
is based on the assumption of the page pool,
(rxq->frag_size - skb_frag_size(frag) - skb_frag_off(frag))
is negative in most cases. So we didn't set xdp_rxq->frag_size in
virtnet_open() to disable the tail increase.

Heng Qi (10):
  virtio-net: disable the hole mechanism for xdp
  virtio-net: fix calculation of MTU for single-buffer xdp
  virtio-net: set up xdp for multi buffer packets
  virtio-net: update bytes calculation for xdp_frame
  virtio-net: build xdp_buff with multi buffers
  virtio-net: construct multi-buffer xdp in mergeable
  virtio-net: transmit the multi-buffer xdp
  virtio-net: build skb from multi-buffer xdp
  virtio-net: remove xdp related info from page_to_skb()
  virtio-net: support multi-buffer xdp

 drivers/net/virtio_net.c | 371 ++++++++++++++++++++++++++-------------
 1 file changed, 250 insertions(+), 121 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org Jan. 16, 2023, 11:20 a.m. UTC | #1
Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Sat, 14 Jan 2023 16:22:19 +0800 you wrote:
> Changes since PATCH v4:
> - Make netdev_warn() in [PATCH 2/10] independent from [PATCH 3/10].
> 
> Changes since PATCH v3:
> - Separate fix patch [2/10] for MTU calculation of single buffer xdp.
>   Note that this patch needs to be backported to the stable branch.
> 
> [...]

Here is the summary with links:
  - [net-next,v5,01/10] virtio-net: disable the hole mechanism for xdp
    https://git.kernel.org/netdev/net-next/c/484beac2ffc1
  - [net-next,v5,02/10] virtio-net: fix calculation of MTU for single-buffer xdp
    https://git.kernel.org/netdev/net-next/c/e814b958ad88
  - [net-next,v5,03/10] virtio-net: set up xdp for multi buffer packets
    https://git.kernel.org/netdev/net-next/c/8d9bc36de5fc
  - [net-next,v5,04/10] virtio-net: update bytes calculation for xdp_frame
    https://git.kernel.org/netdev/net-next/c/50bd14bc98fa
  - [net-next,v5,05/10] virtio-net: build xdp_buff with multi buffers
    https://git.kernel.org/netdev/net-next/c/ef75cb51f139
  - [net-next,v5,06/10] virtio-net: construct multi-buffer xdp in mergeable
    https://git.kernel.org/netdev/net-next/c/22174f79a44b
  - [net-next,v5,07/10] virtio-net: transmit the multi-buffer xdp
    https://git.kernel.org/netdev/net-next/c/97717e8dbda1
  - [net-next,v5,08/10] virtio-net: build skb from multi-buffer xdp
    https://git.kernel.org/netdev/net-next/c/b26aa481b4b7
  - [net-next,v5,09/10] virtio-net: remove xdp related info from page_to_skb()
    https://git.kernel.org/netdev/net-next/c/18117a842ab0
  - [net-next,v5,10/10] virtio-net: support multi-buffer xdp
    https://git.kernel.org/netdev/net-next/c/fab89bafa95b

You are awesome, thank you!