[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v3 20/32] virtio-mmio: Clear v2 transport state on soft reset
From: |
Michael S. Tsirkin |
Subject: |
[PULL v3 20/32] virtio-mmio: Clear v2 transport state on soft reset |
Date: |
Tue, 7 Jan 2020 11:31:02 -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 v3 07/32] virtio: update queue size on guest write, (continued)
- [PULL v3 07/32] virtio: update queue size on guest write, Michael S. Tsirkin, 2020/01/07
- [PULL v3 08/32] virtio-pci: disable vring processing when bus-mastering is disabled, Michael S. Tsirkin, 2020/01/07
- [PULL v3 09/32] Implement backend program convention command for vhost-user-blk, Michael S. Tsirkin, 2020/01/07
- [PULL v3 10/32] virtio: don't enable notifications during polling, Michael S. Tsirkin, 2020/01/07
- [PULL v3 11/32] numa: Extend CLI to provide initiator information for numa nodes, Michael S. Tsirkin, 2020/01/07
- [PULL v3 12/32] numa: Extend CLI to provide memory latency and bandwidth information, Michael S. Tsirkin, 2020/01/07
- [PULL v3 16/32] hmat acpi: Build Memory Side Cache Information Structure(s), Michael S. Tsirkin, 2020/01/07
- [PULL v3 17/32] tests/numa: Add case for QMP build HMAT, Michael S. Tsirkin, 2020/01/07
- [PULL v3 18/32] tests/bios-tables-test: add test cases for ACPI HMAT, Michael S. Tsirkin, 2020/01/07
- [PULL v3 19/32] ACPI: add expected files for HMAT tests (acpihmat), Michael S. Tsirkin, 2020/01/07
- [PULL v3 20/32] virtio-mmio: Clear v2 transport state on soft reset,
Michael S. Tsirkin <=
- [PULL v3 14/32] hmat acpi: Build Memory Proximity Domain Attributes Structure(s), Michael S. Tsirkin, 2020/01/07
- [PULL v3 21/32] hw/pci/pci_host: Remove redundant PCI_DPRINTF(), Michael S. Tsirkin, 2020/01/07
- [PULL v3 15/32] hmat acpi: Build System Locality Latency and Bandwidth Information Structure(s), Michael S. Tsirkin, 2020/01/07
- [PULL v3 22/32] hw/pci/pci_host: Let pci_data_[read/write] use unsigned 'size' argument, Michael S. Tsirkin, 2020/01/07
- [PULL v3 23/32] vhost-user: add VHOST_USER_RESET_DEVICE to reset devices, Michael S. Tsirkin, 2020/01/07
- [PULL v3 24/32] vhost-user-scsi: reset the device if supported, Michael S. Tsirkin, 2020/01/07
- [PULL v3 25/32] hw: fix using 4.2 compat in 5.0 machine types for i440fx/q35, Michael S. Tsirkin, 2020/01/07
- [PULL v3 13/32] numa: Extend CLI to provide memory side cache information, Michael S. Tsirkin, 2020/01/07
- [PULL v3 26/32] virtio: make seg_max virtqueue size dependent, Michael S. Tsirkin, 2020/01/07
- [PULL v3 27/32] tests: add virtio-scsi and virtio-blk seg_max_adjust test, Michael S. Tsirkin, 2020/01/07