]> git.proxmox.com Git - qemu.git/commitdiff
dataplane: support viostor virtio-pci status bit setting
authorStefan Hajnoczi <stefanha@redhat.com>
Thu, 17 Jan 2013 15:46:54 +0000 (16:46 +0100)
committerStefan Hajnoczi <stefanha@redhat.com>
Fri, 18 Jan 2013 15:59:20 +0000 (16:59 +0100)
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 <stefanha@redhat.com>
hw/virtio-blk.c

index df57b35f1b7157af4c2ea77285c2554dc7e9db7d..34913ee40ee1e9478e8a1d10c0b1b92a11499477 100644 (file)
@@ -571,7 +571,8 @@ static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status)
     uint32_t features;
 
 #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
-    if (s->dataplane && !(status & VIRTIO_CONFIG_S_DRIVER)) {
+    if (s->dataplane && !(status & (VIRTIO_CONFIG_S_DRIVER |
+                                    VIRTIO_CONFIG_S_DRIVER_OK))) {
         virtio_blk_data_plane_stop(s->dataplane);
     }
 #endif