[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bi
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH] dataplane: support viostor virtio-pci status bit setting |
Date: |
Thu, 17 Jan 2013 17:59:14 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Thu, Jan 17, 2013 at 05:59:17PM +0200, Michael S. Tsirkin wrote:
> On Thu, Jan 17, 2013 at 04:46:54PM +0100, Stefan Hajnoczi wrote:
> > The viostor virtio-blk driver for Windows does not use the
> > VIRTIO_CONFIG_S_DRIVER bit. It only sets the VIRTIO_CONFIG_S_DRIVER_OK
> > bit.
> >
> > The viostor driver refreshes the virtio-pci status byte sometimes while
> > the guest is running. We misinterpret 0x4 (VIRTIO_CONFIG_S_DRIVER_OK)
> > as an indication that virtio-blk-data-plane should be stopped since 0x2
> > (VIRTIO_CONFIG_S_DRIVER) is missing. The result is that the device
> > becomes unresponsive.
> >
> > Signed-off-by: Stefan Hajnoczi <address@hidden>
>
> I think you actually want
>
> if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER_OK)))
>
> so stop on any error.
>
> This is also consistent with what vhost-net does.
We can't do that because of the Linux virtio quirk where it begins using
virtqueues before VIRTIO_CONFIG_S_DRIVER_OK. I original checked
VIRTIO_CONFIG_S_DRIVER_OK but I'm pretty sure I hit a situation where
the status would still be set ~DRIVER_OK after the first kick - this
would stop data plane and the vring last indices would no longer be in
sync when it started again.
So I think it's most robust to check both DRIVER and DRIVER_OK.
Stefan