summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2015-05-04 15:27:25 +0200
committerCornelia Huck <cornelia.huck@de.ibm.com>2015-05-08 10:36:02 +0200
commit77ae0b2a6e731ab7b97e9fae401c579397edb31c (patch)
tree4efb14aa0d7e770efb04016ebf924cabe5f82ca9
parentf50616a81b7f88a9adac16f3ea0236311a748eca (diff)
downloadfocaccia-qemu-77ae0b2a6e731ab7b97e9fae401c579397edb31c.tar.gz
focaccia-qemu-77ae0b2a6e731ab7b97e9fae401c579397edb31c.zip
s390-virtio: clear {used,avail}_event_idx on reset as well
The old s390-virtio transport clears the vring used/avail indices in
the shared area on reset. When we enabled event_idx for virtio-blk, we
noticed that this is not enough: We also need to clear the published
used/avail event indices, or reboot will fail.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
-rw-r--r--hw/s390x/s390-virtio-bus.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 4a33c6a409..4f69cbbb70 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -77,10 +77,18 @@ void s390_virtio_reset_idx(VirtIOS390Device *dev)
             VIRTIO_VRING_AVAIL_IDX_OFFS;
         address_space_stw(&address_space_memory, idx_addr, 0,
                           MEMTXATTRS_UNSPECIFIED, NULL);
+        idx_addr = virtio_queue_get_avail_addr(dev->vdev, i) +
+            virtio_queue_get_avail_size(dev->vdev, i);
+        address_space_stw(&address_space_memory, idx_addr, 0,
+                          MEMTXATTRS_UNSPECIFIED, NULL);
         idx_addr = virtio_queue_get_used_addr(dev->vdev, i) +
             VIRTIO_VRING_USED_IDX_OFFS;
         address_space_stw(&address_space_memory, idx_addr, 0,
                           MEMTXATTRS_UNSPECIFIED, NULL);
+        idx_addr = virtio_queue_get_used_addr(dev->vdev, i) +
+            virtio_queue_get_used_size(dev->vdev, i);
+        address_space_stw(&address_space_memory, idx_addr, 0,
+                          MEMTXATTRS_UNSPECIFIED, NULL);
     }
 }