[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot |
Date: |
Thu, 26 Apr 2012 15:16:00 +0200 |
On 23.04.2012, at 11:52, Christian Borntraeger wrote:
> 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);
Are you sure this is correct to do in the sync callback? The idea of "sync" was
to have a callback that can be called every time config information changes.
That could even be something as simple as a byte changing in the virtio device
specific config space. But because we don't get callbacks when the guest
accesses them, we need to synchronize it with real memory.
Alex
> 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
>
- [Qemu-devel] [PATCH 0/7] Fixes for s390, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 2/7] [s390] fix error handling on kernel and initrd failures, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 5/7] [s390] support reboot for kvm on s390, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 6/7] [s390] remove default cdrom, sd-card and floppy support, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 1/7] [s390] fix kernel_commandline handling, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 3/7] [s390] reboot: reset device pages on reboot, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 7/7] [s390] dont call system_shutdown on disabled wait, Christian Borntraeger, 2012/04/23
- [Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot, Christian Borntraeger, 2012/04/23
- Re: [Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot,
Alexander Graf <=
- Re: [Qemu-devel] [PATCH 4/7] [s390] reset avail and used index on reboot, Jens Freimann, 2012/04/26
Re: [Qemu-devel] [PATCH 0/7] Fixes for s390, Alexander Graf, 2012/04/26