qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot


From: Christian Borntraeger
Subject: [Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot
Date: Mon, 23 Apr 2012 11:52:22 +0200

From: Jens Freimann <address@hidden>

reset the guest vring avail/used idx fields, otherwise it's possible
that old values remain in memory which would cause a reboot to fail
with a "Guest moved used index" message

Signed-off-by: Jens Freimann <address@hidden>
Signed-off-by: Christian Borntraeger <address@hidden>
---
 hw/s390-virtio-bus.c |    7 +++++++
 hw/s390-virtio-bus.h |    2 ++
 2 files changed, 9 insertions(+)

diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
index 74419b3..084bac1 100644
--- a/hw/s390-virtio-bus.c
+++ b/hw/s390-virtio-bus.c
@@ -225,6 +225,7 @@ void s390_virtio_device_sync(VirtIOS390Device *dev)
 {
     VirtIOS390Bus *bus = DO_UPCAST(VirtIOS390Bus, bus, dev->qdev.parent_bus);
     ram_addr_t cur_offs;
+    target_phys_addr_t idx_addr;
     uint8_t num_vq;
     int i;
 
@@ -250,6 +251,12 @@ void s390_virtio_device_sync(VirtIOS390Device *dev)
         vring = s390_virtio_next_ring(bus);
         virtio_queue_set_addr(dev->vdev, i, vring);
         virtio_queue_set_vector(dev->vdev, i, i);
+        idx_addr = virtio_queue_get_avail_addr(dev->vdev, i) +
+                     VIRTIO_VRING_AVAIL_IDX_OFFS;
+        stw_phys(idx_addr, 0);
+        idx_addr = virtio_queue_get_used_addr(dev->vdev, i) +
+                     VIRTIO_VRING_USED_IDX_OFFS;
+        stw_phys(idx_addr, 0);
         stq_be_phys(vq + VIRTIO_VQCONFIG_OFFS_ADDRESS, vring);
         stw_be_phys(vq + VIRTIO_VQCONFIG_OFFS_NUM, 
virtio_queue_get_num(dev->vdev, i));
     }
diff --git a/hw/s390-virtio-bus.h b/hw/s390-virtio-bus.h
index 0e60bc0..8deec1e 100644
--- a/hw/s390-virtio-bus.h
+++ b/hw/s390-virtio-bus.h
@@ -34,6 +34,8 @@
 #define VIRTIO_VQCONFIG_LEN            24
 
 #define VIRTIO_RING_LEN                        (TARGET_PAGE_SIZE * 3)
+#define VIRTIO_VRING_AVAIL_IDX_OFFS 2
+#define VIRTIO_VRING_USED_IDX_OFFS 2
 #define S390_DEVICE_PAGES              512
 
 #define VIRTIO_PARAM_MASK               0xff
-- 
1.7.9.6




reply via email to

[Prev in Thread] Current Thread [Next in Thread]