]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
hw/block/nvme: fix invalid msix exclusive uninit
authorKlaus Jensen <k.jensen@samsung.com>
Fri, 23 Apr 2021 05:21:26 +0000 (07:21 +0200)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 26 Apr 2021 13:55:50 +0000 (14:55 +0100)
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>
hw/block/nvme.c

index 624a1431d072f38cc270ab99e6cfeac60d912edb..5fe082ec34c57471fab0fa7e8a0cdb42914f6454 100644 (file)
@@ -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[] = {