On Thu, Sep 18, 2025 at 10:52 PM Michael S. Tsirkin <m...@redhat.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 <m...@redhat.com> > > Cc: sta...@vger.kernel.org > > Fixes: 67a873df0c41 ("vhost: basic in order support") > > Signed-off-by: Jason Wang <jasow...@redhat.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 >