mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
hw/nvme: fix controller hot unplugging
Prior to this patch the nvme-ns devices are always children of the NvmeBus owned by the NvmeCtrl. This causes the namespaces to be unrealized when the parent device is removed. However, when subsystems are involved, this is not what we want since the namespaces may be attached to other controllers as well. This patch adds an additional NvmeBus on the subsystem device. When nvme-ns devices are realized, if the parent controller device is linked to a subsystem, the parent bus is set to the subsystem one instead. This makes sure that namespaces are kept alive and not unrealized. Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
This commit is contained in:
parent
51e90178f7
commit
5ffbaeed16
4 changed files with 35 additions and 15 deletions
|
@ -6527,16 +6527,14 @@ static void nvme_exit(PCIDevice *pci_dev)
|
|||
|
||||
nvme_ctrl_reset(n);
|
||||
|
||||
for (i = 1; i <= NVME_MAX_NAMESPACES; i++) {
|
||||
ns = nvme_ns(n, i);
|
||||
if (!ns) {
|
||||
continue;
|
||||
if (n->subsys) {
|
||||
for (i = 1; i <= NVME_MAX_NAMESPACES; i++) {
|
||||
ns = nvme_ns(n, i);
|
||||
if (ns) {
|
||||
ns->attached--;
|
||||
}
|
||||
}
|
||||
|
||||
nvme_ns_cleanup(ns);
|
||||
}
|
||||
|
||||
if (n->subsys) {
|
||||
nvme_subsys_unregister_ctrl(n->subsys, n);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue