]> git.proxmox.com Git - mirror_qemu.git/commitdiff
virtio: Don't change "started" flag on virtio_vmstate_change()
authorXie Yongji <xieyongji@baidu.com>
Wed, 26 Jun 2019 02:31:30 +0000 (10:31 +0800)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 4 Jul 2019 21:00:32 +0000 (17:00 -0400)
We will call virtio_set_status() on virtio_vmstate_change().
The "started" flag should not be changed in this case. Otherwise,
we may get an incorrect value when we set "started" flag but
not set DRIVER_OK in source VM.

Signed-off-by: Xie Yongji <xieyongji@baidu.com>
Message-Id: <20190626023130.31315-6-xieyongji@baidu.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/virtio/virtio.c

index e098fc8ef0668cdadfb06021bca82a73b8d11e15..18f9f4c372b781551d5f6fb46a11e1891670c5a6 100644 (file)
@@ -1163,7 +1163,10 @@ int virtio_set_status(VirtIODevice *vdev, uint8_t val)
         }
     }
 
-    virtio_set_started(vdev, val & VIRTIO_CONFIG_S_DRIVER_OK);
+    if ((vdev->status & VIRTIO_CONFIG_S_DRIVER_OK) !=
+        (val & VIRTIO_CONFIG_S_DRIVER_OK)) {
+        virtio_set_started(vdev, val & VIRTIO_CONFIG_S_DRIVER_OK);
+    }
 
     if (k->set_status) {
         k->set_status(vdev, val);