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 <stefa...@redhat.com> > > 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