diff options
author | Jason Wang <jasowang@redhat.com> | 2023-07-20 04:38:39 -0400 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2024-03-19 03:19:22 -0400 |
commit | 0d197a14716481626f863d2091f4c328bf5412e3 (patch) | |
tree | 6d62e41a84ddb7f61bc9733cce02e8e4e8397364 | |
parent | b9f7425239a09903629f71f719654983481b00aa (diff) |
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 <jasowang@redhat.com>
Message-Id: <20230720083839.481487-3-jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
-rw-r--r-- | drivers/net/virtio_net.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 46fc86fe62df..e709d4411810 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; } |