Skip to content

Commit

Permalink
virtio-pci: Changed return values for "notify", "device" and "isr" read.
Browse files Browse the repository at this point in the history
At some point, after unplugging virtio-pci the virtio device may be unrealised,
but the memory regions may be present in flatview. So, it's a possible situation
when memory region's callbacks are called for "unplugged" device.

Previous two patches made sure this case does not cause QEMU to crash.
This patch adds check for "notify" memory region. Now reads will return "-1" if a virtio
device is not present on a virtio bus.

Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1938042
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1743098

Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
Message-Id: <20210609095843.141378-4-andrew@daynix.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
AndrewAtDaynix authored and mstsirkin committed Jul 3, 2021
1 parent bf69737 commit df07a8f
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions hw/virtio/virtio-pci.c
Expand Up @@ -1349,6 +1349,11 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr,
static uint64_t virtio_pci_notify_read(void *opaque, hwaddr addr,
unsigned size)
{
VirtIOPCIProxy *proxy = opaque;
if (virtio_bus_get_device(&proxy->bus) == NULL) {
return UINT64_MAX;
}

return 0;
}

Expand Down Expand Up @@ -1386,7 +1391,7 @@ static uint64_t virtio_pci_isr_read(void *opaque, hwaddr addr,
uint64_t val;

if (vdev == NULL) {
return 0;
return UINT64_MAX;
}

val = qatomic_xchg(&vdev->isr, 0);
Expand All @@ -1407,7 +1412,7 @@ static uint64_t virtio_pci_device_read(void *opaque, hwaddr addr,
uint64_t val;

if (vdev == NULL) {
return 0;
return UINT64_MAX;
}

switch (size) {
Expand Down

0 comments on commit df07a8f

Please sign in to comment.