On Tue, Nov 30, 2021 at 06:40:49PM -0500, Michael S. Tsirkin wrote:
> On Tue, Nov 30, 2021 at 01:45:10PM +0000, Stefan Hajnoczi wrote:
> > Packed Virtqueues wrap used_idx instead of letting it run freely like
> > Split Virtqueues do. If the used ring wraps more than once there is no
> > way to compare vq->signalled_used and vq->used_idx in
> > virtio_packed_should_notify() since they are modulo vq->vring.num.
> > 
> > This causes the device to stop sending used buffer notifications when
> > when virtio_packed_should_notify() is called less than once each time
> > around the used ring.
> > 
> > It is possible to trigger this with virtio-blk's dataplane
> > notify_guest_bh() irq coalescing optimization. The call to
> > virtio_notify_irqfd() (and virtio_packed_should_notify()) is deferred to
> > a BH. If the guest driver is polling it can complete and submit more
> > requests before the BH executes, causing the used ring to wrap more than
> > once. The result is that the virtio-blk device ceases to raise
> > interrupts and I/O hangs.
> > 
> > Cc: Tiwei Bie <tiwei....@intel.com>
> > Cc: Jason Wang <jasow...@redhat.com>
> > Cc: Michael S. Tsirkin <m...@redhat.com>
> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
> 
> Makes sense.  Fixes tag?

Good idea.

Fixes: 86044b24e865fb9596ed77a4d0f3af8b90a088a1 ("virtio: basic packed 
virtqueue support")

Attachment: signature.asc
Description: PGP signature

Reply via email to