mirror of https://gitee.com/openkylin/qemu.git
virtio-pci: fix memory MR cleanup for modern
Each memory_region_add_subregion must be paired with memory_region_del_subregion. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
09999a5f7f
commit
27462695cd
|
@ -1414,6 +1414,13 @@ static void virtio_pci_modern_region_map(VirtIOPCIProxy *proxy,
|
|||
virtio_pci_add_mem_cap(proxy, cap);
|
||||
}
|
||||
|
||||
static void virtio_pci_modern_region_unmap(VirtIOPCIProxy *proxy,
|
||||
VirtIOPCIRegion *region)
|
||||
{
|
||||
memory_region_del_subregion(&proxy->modern_bar,
|
||||
®ion->mr);
|
||||
}
|
||||
|
||||
/* This is called by virtio-bus just after the device is plugged. */
|
||||
static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
|
||||
{
|
||||
|
@ -1520,8 +1527,16 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
|
|||
static void virtio_pci_device_unplugged(DeviceState *d)
|
||||
{
|
||||
VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
|
||||
bool modern = !(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_MODERN);
|
||||
|
||||
virtio_pci_stop_ioeventfd(proxy);
|
||||
|
||||
if (modern) {
|
||||
virtio_pci_modern_region_unmap(proxy, &proxy->common);
|
||||
virtio_pci_modern_region_unmap(proxy, &proxy->isr);
|
||||
virtio_pci_modern_region_unmap(proxy, &proxy->device);
|
||||
virtio_pci_modern_region_unmap(proxy, &proxy->notify);
|
||||
}
|
||||
}
|
||||
|
||||
static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp)
|
||||
|
|
Loading…
Reference in New Issue