]> git.ipfire.org Git - thirdparty/linux.git/commit
virtio: break and reset virtio devices on device_shutdown()
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 8 Aug 2024 07:51:41 +0000 (10:51 +0300)
committerMichael S. Tsirkin <mst@redhat.com>
Mon, 24 Feb 2025 19:29:26 +0000 (14:29 -0500)
commit8bd2fa086a04886798b505f28db4002525895203
tree333bd485f9d0e2c75b0625b8f91f1c352a2528c0
parentd082ecbc71e9e0bf49883ee4afd435a77a5101b6
virtio: break and reset virtio devices on device_shutdown()

Hongyu reported a hang on kexec in a VM. QEMU reported invalid memory
accesses during the hang.

Invalid read at addr 0x102877002, size 2, region '(null)', reason: rejected
Invalid write at addr 0x102877A44, size 2, region '(null)', reason: rejected
...

It was traced down to virtio-console. Kexec works fine if virtio-console
is not in use.

The issue is that virtio-console continues to write to the MMIO even after
underlying virtio-pci device is reset.

Additionally, Eric noticed that IOMMUs are reset before devices, if
devices are not reset on shutdown they continue to poke at guest memory
and get errors from the IOMMU. Some devices get wedged then.

The problem can be solved by breaking all virtio devices on virtio
bus shutdown, then resetting them.

Reported-by: Eric Auger <eauger@redhat.com>
Reported-by: Hongyu Ning <hongyu.ning@linux.intel.com>
Message-ID: <c1dbc7dbad9b445245d3348f19e6742b0be07347.1740094946.git.mst@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/virtio/virtio.c