On Mon, Dec 26, 2022 at 10:33 AM Heng Qi <hengqi@xxxxxxxxxxxxxxxxx> wrote: > > > Hi Jason, do you have any comments on this? I will review this no later than the end of this week. Thanks > > Thanks. > > 在 2022/12/20 下午10:14, Heng Qi 写道: > > 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 (9): > > virtio_net: disable the hole mechanism for 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 | 332 ++++++++++++++++++++++++++------------- > > 1 file changed, 219 insertions(+), 113 deletions(-) > > >