[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CACGkMEsUb0sXqt8yRwnNfhgmqWKm1nkMNYfgxSgz-5CtE3CSUA@mail.gmail.com>
Date: Fri, 19 Sep 2025 15:25:32 +0800
From: Jason Wang <jasowang@...hat.com>
To: "Michael S. Tsirkin" <mst@...hat.com>
Cc: eperezma@...hat.com, jonah.palmer@...cle.com, kuba@...nel.org,
jon@...anix.com, kvm@...r.kernel.org, virtualization@...ts.linux.dev,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org, stable@...r.kernel.org
Subject: Re: [PATCH vhost 1/3] vhost-net: unbreak busy polling
On Thu, Sep 18, 2025 at 10:52 PM Michael S. Tsirkin <mst@...hat.com> wrote:
>
> On Wed, Sep 17, 2025 at 02:30:43PM +0800, Jason Wang wrote:
> > Commit 67a873df0c41 ("vhost: basic in order support") pass the number
> > of used elem to vhost_net_rx_peek_head_len() to make sure it can
> > signal the used correctly before trying to do busy polling. But it
> > forgets to clear the count, this would cause the count run out of sync
> > with handle_rx() and break the busy polling.
> >
> > Fixing this by passing the pointer of the count and clearing it after
> > the signaling the used.
> >
> > Acked-by: Michael S. Tsirkin <mst@...hat.com>
> > Cc: stable@...r.kernel.org
> > Fixes: 67a873df0c41 ("vhost: basic in order support")
> > Signed-off-by: Jason Wang <jasowang@...hat.com>
>
> I queued this but no promises this gets into this release - depending
> on whether there is another rc or no. I had the console revert which
> I wanted in this release and don't want it to be held up.
>
I see.
> for the future, I expect either a cover letter explaining
> what unites the patchset, or just separate patches.
Ok.
Thanks
>
> > ---
> > drivers/vhost/net.c | 7 ++++---
> > 1 file changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
> > index c6508fe0d5c8..16e39f3ab956 100644
> > --- a/drivers/vhost/net.c
> > +++ b/drivers/vhost/net.c
> > @@ -1014,7 +1014,7 @@ static int peek_head_len(struct vhost_net_virtqueue *rvq, struct sock *sk)
> > }
> >
> > static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk,
> > - bool *busyloop_intr, unsigned int count)
> > + bool *busyloop_intr, unsigned int *count)
> > {
> > struct vhost_net_virtqueue *rnvq = &net->vqs[VHOST_NET_VQ_RX];
> > struct vhost_net_virtqueue *tnvq = &net->vqs[VHOST_NET_VQ_TX];
> > @@ -1024,7 +1024,8 @@ static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk,
> >
> > if (!len && rvq->busyloop_timeout) {
> > /* Flush batched heads first */
> > - vhost_net_signal_used(rnvq, count);
> > + vhost_net_signal_used(rnvq, *count);
> > + *count = 0;
> > /* Both tx vq and rx socket were polled here */
> > vhost_net_busy_poll(net, rvq, tvq, busyloop_intr, true);
> >
> > @@ -1180,7 +1181,7 @@ static void handle_rx(struct vhost_net *net)
> >
> > do {
> > sock_len = vhost_net_rx_peek_head_len(net, sock->sk,
> > - &busyloop_intr, count);
> > + &busyloop_intr, &count);
> > if (!sock_len)
> > break;
> > sock_len += sock_hlen;
> > --
> > 2.34.1
>
Powered by blists - more mailing lists