[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v2 20/32] virtio-mmio: Clear v2 transport state on soft reset
From: |
Michael S. Tsirkin |
Subject: |
[PULL v2 20/32] virtio-mmio: Clear v2 transport state on soft reset |
Date: |
Tue, 7 Jan 2020 02:36:52 -0500 |
From: Jean-Philippe Brucker <address@hidden>
At the moment when the guest writes a status of 0, we only reset the
virtio core state but not the virtio-mmio state. The virtio-mmio
specification says (v1.1 cs01, 4.2.2.1 Device Requirements:
MMIO Device Register Layout):
Upon reset, the device MUST clear all bits in InterruptStatus and
ready bits in the QueueReady register for all queues in the device.
The core already takes care of InterruptStatus by clearing isr, but we
still need to clear QueueReady.
It would be tempting to clean all registers, but since the specification
doesn't say anything more, guests could rely on the registers keeping
their state across reset. Linux for example, relies on this for
GuestPageSize in the legacy MMIO tranport.
Fixes: 44e687a4d9ab ("virtio-mmio: implement modern (v2) personality
(virtio-1)")
Signed-off-by: Jean-Philippe Brucker <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Sergio Lopez <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/virtio/virtio-mmio.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
index 94d934c44b..ef40b7a9b2 100644
--- a/hw/virtio/virtio-mmio.c
+++ b/hw/virtio/virtio-mmio.c
@@ -65,6 +65,19 @@ static void virtio_mmio_stop_ioeventfd(VirtIOMMIOProxy
*proxy)
virtio_bus_stop_ioeventfd(&proxy->bus);
}
+static void virtio_mmio_soft_reset(VirtIOMMIOProxy *proxy)
+{
+ int i;
+
+ if (proxy->legacy) {
+ return;
+ }
+
+ for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
+ proxy->vqs[i].enabled = 0;
+ }
+}
+
static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
{
VirtIOMMIOProxy *proxy = (VirtIOMMIOProxy *)opaque;
@@ -378,6 +391,7 @@ static void virtio_mmio_write(void *opaque, hwaddr offset,
uint64_t value,
if (vdev->status == 0) {
virtio_reset(vdev);
+ virtio_mmio_soft_reset(proxy);
}
break;
case VIRTIO_MMIO_QUEUE_DESC_LOW:
--
MST
- [PULL v2 09/32] Implement backend program convention command for vhost-user-blk, (continued)
- [PULL v2 09/32] Implement backend program convention command for vhost-user-blk, Michael S. Tsirkin, 2020/01/07
- [PULL v2 10/32] virtio: don't enable notifications during polling, Michael S. Tsirkin, 2020/01/07
- [PULL v2 11/32] numa: Extend CLI to provide initiator information for numa nodes, Michael S. Tsirkin, 2020/01/07
- [PULL v2 13/32] numa: Extend CLI to provide memory side cache information, Michael S. Tsirkin, 2020/01/07
- [PULL v2 12/32] numa: Extend CLI to provide memory latency and bandwidth information, Michael S. Tsirkin, 2020/01/07
- [PULL v2 15/32] hmat acpi: Build System Locality Latency and Bandwidth Information Structure(s), Michael S. Tsirkin, 2020/01/07
- [PULL v2 14/32] hmat acpi: Build Memory Proximity Domain Attributes Structure(s), Michael S. Tsirkin, 2020/01/07
- [PULL v2 16/32] hmat acpi: Build Memory Side Cache Information Structure(s), Michael S. Tsirkin, 2020/01/07
- [PULL v2 17/32] tests/numa: Add case for QMP build HMAT, Michael S. Tsirkin, 2020/01/07
- [PULL v2 18/32] tests/bios-tables-test: add test cases for ACPI HMAT, Michael S. Tsirkin, 2020/01/07
- [PULL v2 20/32] virtio-mmio: Clear v2 transport state on soft reset,
Michael S. Tsirkin <=
- [PULL v2 19/32] ACPI: add expected files for HMAT tests (acpihmat), Michael S. Tsirkin, 2020/01/07
- [PULL v2 21/32] hw/pci/pci_host: Remove redundant PCI_DPRINTF(), Michael S. Tsirkin, 2020/01/07
- [PULL v2 23/32] vhost-user: add VHOST_USER_RESET_DEVICE to reset devices, Michael S. Tsirkin, 2020/01/07
- [PULL v2 24/32] vhost-user-scsi: reset the device if supported, Michael S. Tsirkin, 2020/01/07
- [PULL v2 25/32] hw: fix using 4.2 compat in 5.0 machine types for i440fx/q35, Michael S. Tsirkin, 2020/01/07
- [PULL v2 26/32] virtio: make seg_max virtqueue size dependent, Michael S. Tsirkin, 2020/01/07
- [PULL v2 27/32] tests: add virtio-scsi and virtio-blk seg_max_adjust test, Michael S. Tsirkin, 2020/01/07
- [PULL v2 28/32] virtio-mmio: update queue size on guest write, Michael S. Tsirkin, 2020/01/07
- [PULL v2 29/32] virtio: reset region cache when on queue deletion, Michael S. Tsirkin, 2020/01/07
- [PULL v2 30/32] virtio-net: delete also control queue when TX/RX deleted, Michael S. Tsirkin, 2020/01/07