aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Jensen <k.jensen@samsung.com>2021-04-23 07:21:26 +0200
committerPeter Maydell <peter.maydell@linaro.org>2021-04-26 14:55:50 +0100
commit5351fb7cb2caf81bccbfd5ee4228106cadc56e3c (patch)
treed460cc64afdfc2f6a826435440dc402f2275e80b
parentffa090bc56e73e287a63261e70ac02c0970be61a (diff)
hw/block/nvme: fix invalid msix exclusive uninit
Commit 1901b4967c3f changed the nvme device from using a bar exclusive for MSI-x to sharing it on bar0. Unfortunately, the msix_uninit_exclusive_bar() call remains in nvme_exit() which causes havoc when the device is removed with, say, device_del. Fix this. Additionally, a subregion is added but it is not removed on exit which causes a reference to linger and the drive to never be unlocked. Fixes: 1901b4967c3f ("hw/block/nvme: move msix table and pba to BAR 0") Signed-off-by: Klaus Jensen <k.jensen@samsung.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/block/nvme.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 624a1431d0..5fe082ec34 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -6235,7 +6235,8 @@ static void nvme_exit(PCIDevice *pci_dev)
if (n->pmr.dev) {
host_memory_backend_set_mapped(n->pmr.dev, false);
}
- msix_uninit_exclusive_bar(pci_dev);
+ msix_uninit(pci_dev, &n->bar0, &n->bar0);
+ memory_region_del_subregion(&n->bar0, &n->iomem);
}
static Property nvme_props[] = {