From: "Michael S. Tsirkin" <mst@redhat.com>
To: Bui Quang Minh <minhquangbui99@gmail.com>
Cc: netdev@vger.kernel.org, "Jason Wang" <jasowang@redhat.com>,
"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
"Eugenio Pérez" <eperezma@redhat.com>,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Jesper Dangaard Brouer" <hawk@kernel.org>,
"John Fastabend" <john.fastabend@gmail.com>,
"Stanislav Fomichev" <sdf@fomichev.me>,
virtualization@lists.linux.dev, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org
Subject: Re: [PATCH net 3/3] virtio-net: schedule the pending refill work after being enabled
Date: Wed, 24 Dec 2025 05:17:30 -0500 [thread overview]
Message-ID: <20251224051636-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20251223152533.24364-4-minhquangbui99@gmail.com>
On Tue, Dec 23, 2025 at 10:25:33PM +0700, Bui Quang Minh wrote:
> As we need to move the enable_delayed_refill after napi_enable, it's
> possible that a refill work needs to be scheduled in virtnet_receive but
> it cannot. This can make the receive side stuck because if we don't have
> any receive buffers, there will be nothing trigger the refill logic. So
> in case it happens, in virtnet_receive, set the rx queue's
> refill_pending, then when the refill work is enabled again, a refill
> work will be scheduled.
>
> Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
Sounds like this fixes a bug previous patch introduces?
The thing to do is to reorder these two patches then.
> ---
> drivers/net/virtio_net.c | 21 ++++++++++++---------
> 1 file changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 8016d2b378cf..ddc62dab2f9a 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -383,6 +383,9 @@ struct receive_queue {
> /* Is delayed refill enabled? */
> bool refill_enabled;
>
> + /* A refill work needs to be scheduled when delayed refill is enabled */
> + bool refill_pending;
> +
> /* The lock to synchronize the access to refill_enabled */
> spinlock_t refill_lock;
>
> @@ -720,10 +723,13 @@ static void virtnet_rq_free_buf(struct virtnet_info *vi,
> put_page(virt_to_head_page(buf));
> }
>
> -static void enable_delayed_refill(struct receive_queue *rq)
> +static void enable_delayed_refill(struct receive_queue *rq,
> + bool schedule_refill)
> {
> spin_lock_bh(&rq->refill_lock);
> rq->refill_enabled = true;
> + if (rq->refill_pending || schedule_refill)
> + schedule_delayed_work(&rq->refill, 0);
> spin_unlock_bh(&rq->refill_lock);
> }
>
> @@ -3032,6 +3038,8 @@ static int virtnet_receive(struct receive_queue *rq, int budget,
> spin_lock(&rq->refill_lock);
> if (rq->refill_enabled)
> schedule_delayed_work(&rq->refill, 0);
> + else
> + rq->refill_pending = true;
> spin_unlock(&rq->refill_lock);
> }
> }
> @@ -3228,11 +3236,8 @@ static int virtnet_open(struct net_device *dev)
> if (err < 0)
> goto err_enable_qp;
>
> - if (i < vi->curr_queue_pairs) {
> - enable_delayed_refill(&vi->rq[i]);
> - if (schedule_refill)
> - schedule_delayed_work(&vi->rq[i].refill, 0);
> - }
> + if (i < vi->curr_queue_pairs)
> + enable_delayed_refill(&vi->rq[i], schedule_refill);
> }
>
> if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) {
> @@ -3480,9 +3485,7 @@ static void __virtnet_rx_resume(struct virtnet_info *vi,
> if (running)
> virtnet_napi_enable(rq);
>
> - enable_delayed_refill(rq);
> - if (schedule_refill)
> - schedule_delayed_work(&rq->refill, 0);
> + enable_delayed_refill(rq, schedule_refill);
> }
>
> static void virtnet_rx_resume_all(struct virtnet_info *vi)
> --
> 2.43.0
prev parent reply other threads:[~2025-12-24 10:17 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-23 15:25 [PATCH net 0/3] virtio-net: fix the deadlock when disabling rx NAPI Bui Quang Minh
2025-12-23 15:25 ` [PATCH net 1/3] virtio-net: make refill work a per receive queue work Bui Quang Minh
2025-12-24 0:52 ` Jason Wang
2025-12-24 1:37 ` Xuan Zhuo
2025-12-24 1:47 ` Michael S. Tsirkin
2025-12-24 16:49 ` Bui Quang Minh
2025-12-25 15:55 ` Bui Quang Minh
2025-12-25 16:27 ` Michael S. Tsirkin
2025-12-25 7:33 ` Jason Wang
2025-12-25 16:27 ` Michael S. Tsirkin
2025-12-26 1:31 ` Jason Wang
2025-12-26 7:37 ` Michael S. Tsirkin
2025-12-29 2:57 ` Jason Wang
2025-12-30 16:28 ` Bui Quang Minh
2025-12-30 16:44 ` Michael S. Tsirkin
2025-12-31 7:30 ` Jason Wang
2025-12-31 15:25 ` Bui Quang Minh
2025-12-24 16:43 ` Bui Quang Minh
2025-12-24 1:34 ` Michael S. Tsirkin
2025-12-24 10:19 ` Michael S. Tsirkin
2025-12-24 17:03 ` Bui Quang Minh
2025-12-23 15:25 ` [PATCH net 2/3] virtio-net: ensure rx NAPI is enabled before enabling refill work Bui Quang Minh
2025-12-24 1:45 ` Michael S. Tsirkin
2025-12-24 17:49 ` Bui Quang Minh
2025-12-24 10:20 ` Michael S. Tsirkin
2025-12-23 15:25 ` [PATCH net 3/3] virtio-net: schedule the pending refill work after being enabled Bui Quang Minh
2025-12-24 10:17 ` Michael S. Tsirkin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251224051636-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=andrew+netdev@lunn.ch \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eperezma@redhat.com \
--cc=hawk@kernel.org \
--cc=jasowang@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=minhquangbui99@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=virtualization@lists.linux.dev \
--cc=xuanzhuo@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.