virtio-pci: Added check for virtio device presence in mm callbacks.

During unplug the virtio device is unplugged from virtio-bus on pci. In some cases,
requests to virtio-pci mm may acquire during/after unplug. Added check that virtio
device is on the bus, for "common" memory region.

Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
Message-Id: <20210609095843.141378-2-andrew@daynix.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Andrew Melnychenko 2021-06-09 12:58:41 +03:00 committed by Michael S. Tsirkin
parent 9b0ca75e01
commit 80ebfd69b9
1 changed files with 8 additions and 0 deletions

View File

@ -1147,6 +1147,10 @@ static uint64_t virtio_pci_common_read(void *opaque, hwaddr addr,
uint32_t val = 0;
int i;
if (vdev == NULL) {
return UINT64_MAX;
}
switch (addr) {
case VIRTIO_PCI_COMMON_DFSELECT:
val = proxy->dfselect;
@ -1230,6 +1234,10 @@ static void virtio_pci_common_write(void *opaque, hwaddr addr,
VirtIOPCIProxy *proxy = opaque;
VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
if (vdev == NULL) {
return;
}
switch (addr) {
case VIRTIO_PCI_COMMON_DFSELECT:
proxy->dfselect = val;