XDP socket(AF_XDP) is an excellent bypass kernel network framework. The zero copy feature of xsk (XDP socket) needs to be supported by the driver. The performance of zero copy is very good. mlx5 and intel ixgbe already support this feature, This patch set allows virtio-net to support xsk's zerocopy xmit feature. Virtio-net did not support per-queue reset, so it was impossible to support XDP Socket Zerocopy. At present, we have completed the work of Virtio Spec and Kernel in Per-Queue Reset. It is time for Virtio-Net to complete the support for the XDP Socket Zerocopy. Virtio-net can not increase the queue at will, so xsk shares the queue with kernel. On the other hand, Virtio-Net does not support generate interrupt manually, so when we wakeup tx xmit, we used some tips. If the CPU run by TX NAPI last time is other CPUs, use IPI to wake up NAPI on the remote CPU. If it is also the local CPU, then we wake up sofrirqd. Please review. Thanks. Xuan Zhuo (33): virtio_ring: virtqueue_add() support premapped virtio_ring: split: virtqueue_add_split() support premapped virtio_ring: packed: virtqueue_add_packed() support premapped virtio_ring: introduce virtqueue_add_outbuf_premapped() virtio_ring: introduce virtqueue_add_inbuf_premapped() virtio_ring: introduce virtqueue_reset() virtio_ring: add api virtio_dma_map() for advance dma virtio_ring: introduce dma sync api for virtio xsk: xsk_buff_pool add callback for dma_sync xsk: support virtio DMA map virtio_net: rename free_old_xmit_skbs to free_old_xmit virtio_net: unify the code for recycling the xmit ptr virtio_net: virtnet_poll_tx support rescheduled virtio_net: independent directory virtio_net: move to virtio_net.h virtio_net: introduce virtnet_xdp_handler() to seprate the logic of run xdp virtio_net: receive_small() use virtnet_xdp_handler() virtio_net: receive_merageable() use virtnet_xdp_handler() virtio_net: introduce virtnet_tx_reset() virtio_net: xsk: introduce virtnet_rq_bind_xsk_pool() virtio_net: xsk: introduce virtnet_xsk_pool_enable() virtio_net: xsk: introduce xsk disable virtio_net: xsk: support xsk setup virtio_net: xsk: stop disable tx napi virtio_net: xsk: __free_old_xmit distinguishes xsk buffer virtio_net: virtnet_sq_free_unused_buf() check xsk buffer virtio_net: virtnet_rq_free_unused_buf() check xsk buffer net: introduce napi_tx_raise() virtio_net: xsk: tx: support tx virtio_net: xsk: tx: support wakeup virtio_net: xsk: tx: auto wakeup when free old xmit virtio_net: xsk: rx: introduce add_recvbuf_xsk() virtio_net: xsk: rx: introduce receive_xsk() to recv xsk buffer MAINTAINERS | 2 +- drivers/net/Kconfig | 8 +- drivers/net/Makefile | 2 +- drivers/net/virtio/Kconfig | 11 + drivers/net/virtio/Makefile | 8 + drivers/net/{virtio_net.c => virtio/main.c} | 564 +++++++------------- drivers/net/virtio/virtio_net.h | 317 +++++++++++ drivers/net/virtio/xsk.c | 524 ++++++++++++++++++ drivers/net/virtio/xsk.h | 33 ++ drivers/virtio/virtio_ring.c | 376 +++++++++++-- include/linux/netdevice.h | 7 + include/linux/virtio.h | 29 + include/net/xsk_buff_pool.h | 6 + net/core/dev.c | 11 + net/xdp/xsk_buff_pool.c | 79 ++- 15 files changed, 1541 insertions(+), 436 deletions(-) create mode 100644 drivers/net/virtio/Kconfig create mode 100644 drivers/net/virtio/Makefile rename drivers/net/{virtio_net.c => virtio/main.c} (92%) create mode 100644 drivers/net/virtio/virtio_net.h create mode 100644 drivers/net/virtio/xsk.c create mode 100644 drivers/net/virtio/xsk.h -- 2.32.0.3.g01195cf9f