virtnet_poll_tx() support to return budget when busy to be rescheduled. When retval < budget, napi_poll() in dev.c will exit directly. And virtqueue_napi_complete() will be called to close napi. When retval == budget, the napi_poll() in dev.c will re-add napi to the queue. The purpose of this patch is to support xsk xmit in virtio_poll_tx() for subsequent patch. Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> --- drivers/net/virtio_net.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 058ec6ca7cfc..eb7f00194b5c 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1848,6 +1848,7 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget) struct virtnet_info *vi = sq->vq->vdev->priv; unsigned int index = vq2txq(sq->vq); struct netdev_queue *txq; + int busy = 0; int opaque; bool done; @@ -1865,6 +1866,11 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget) if (sq->vq->num_free >= 2 + MAX_SKB_FRAGS) netif_tx_wake_queue(txq); + if (busy) { + __netif_tx_unlock(txq); + return budget; + } + opaque = virtqueue_enable_cb_prepare(sq->vq); done = napi_complete_done(napi, 0); -- 2.32.0.3.g01195cf9f