Commit 269bd822 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin Committed by Stefan Hajnoczi
Browse files

virtio: don't call device on !vm_running



On vm stop, virtio changes vm_running state
too soon, so callbacks can get envoked with
vm_running = false;

Cc: qemu-stable@nongnu.org
Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent e8bcf842
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -1108,7 +1108,10 @@ static void virtio_vmstate_change(void *opaque, int running, RunState state)
    BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
    VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
    bool backend_run = running && (vdev->status & VIRTIO_CONFIG_S_DRIVER_OK);

    if (running) {
        vdev->vm_running = running;
    }

    if (backend_run) {
        virtio_set_status(vdev, vdev->status);
@@ -1121,6 +1124,10 @@ static void virtio_vmstate_change(void *opaque, int running, RunState state)
    if (!backend_run) {
        virtio_set_status(vdev, vdev->status);
    }

    if (!running) {
        vdev->vm_running = running;
    }
}

void virtio_init(VirtIODevice *vdev, const char *name,