From: Jason Wang Date: Thu, 20 Jul 2023 08:38:39 +0000 (-0400) Subject: virtio-net: add cond_resched() to the command waiting loop X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=0d197a14716481626f863d2091f4c328bf5412e3;p=linux.git virtio-net: add cond_resched() to the command waiting loop Adding cond_resched() to the command waiting loop for a better co-operation with the scheduler. This allows to give CPU a breath to run other task(workqueue) instead of busy looping when preemption is not allowed on a device whose CVQ might be slow. Signed-off-by: Jason Wang Message-Id: <20230720083839.481487-3-jasowang@redhat.com> Signed-off-by: Michael S. Tsirkin Reviewed-by: Shannon Nelson --- diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 46fc86fe62df3..e709d4411810d 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2570,8 +2570,10 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, * into the hypervisor, so the request should be handled immediately. */ while (!virtqueue_get_buf(vi->cvq, &tmp) && - !virtqueue_is_broken(vi->cvq)) + !virtqueue_is_broken(vi->cvq)) { + cond_resched(); cpu_relax(); + } return vi->ctrl->status == VIRTIO_NET_OK; }