hw/nvme: fix assertion failure on subregion removal
When a controller is created with a MSI-X exclusive BAR, the bar0 memory region is not used at all, and so, the iomem region is not added as a subregion of it. However, when removing a NVMe controller, the iomem region is unconditionally removed as a subregion of bar0, causing an assertion failure. Remove the iomem memory region as a subregion of bar0 only if not using a MSI-X exclusive BAR. QEMU options (requires a hotunplug-aware OS): -M q35 -device pcie-root-port,id=rp0 \ -device nvme,serial=ctrl0,id=ctrl0,bus=rp0,msix-exclusive-bar=on In the QEMU monitor, or by causing an ejection from the OS: device_del ctrl0 Message in stderr: qemu-system-x86_64: ../system/memory.c:2617: memory_region_del_subregion: Assertion `subregion->container == mr' failed. Fixes: fa905f65c554 ("hw/nvme: add machine compatibility parameter to enable msix exclusive bar") Fixes: 9162f1012576 ("hw/nvme: fix msix_uninit with exclusive bar") Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4090 Signed-off-by: Daniel Paziyski <danielpaziyski@gmail.com> Reviewed-by: Klaus Jensen <k.jensen@samsung.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>