From: Wenliang Wang Date: Thu, 4 May 2023 02:27:06 +0000 (+0800) Subject: virtio_net: suppress cpu stall when free_unused_bufs X-Git-Tag: v6.1.29~152 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d86d42e4a9b6dc237c4166d035ba5b0bd6768a84;p=users%2Fdwmw2%2Flinux.git virtio_net: suppress cpu stall when free_unused_bufs [ Upstream commit f8bb5104394560e29017c25bcade4c6b7aabd108 ] For multi-queue and large ring-size use case, the following error occurred when free_unused_bufs: rcu: INFO: rcu_sched self-detected stall on CPU. Fixes: 986a4f4d452d ("virtio_net: multiqueue support") Signed-off-by: Wenliang Wang Acked-by: Michael S. Tsirkin Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 3f1883814ce21..9a612b13b4e46 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -3405,12 +3405,14 @@ static void free_unused_bufs(struct virtnet_info *vi) struct virtqueue *vq = vi->sq[i].vq; while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) virtnet_sq_free_unused_buf(vq, buf); + cond_resched(); } for (i = 0; i < vi->max_queue_pairs; i++) { struct virtqueue *vq = vi->rq[i].vq; while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) virtnet_rq_free_unused_buf(vq, buf); + cond_resched(); } }