hw/nvme: unregister controller with subsystem at exit

Make sure the controller is unregistered from the subsystem when device
is removed.

Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
This commit is contained in:
Klaus Jensen 2021-07-06 10:51:36 +02:00
parent cc6fb6bc50
commit b0fde9e861
3 changed files with 10 additions and 0 deletions

View File

@ -6523,6 +6523,10 @@ static void nvme_exit(PCIDevice *pci_dev)
nvme_ns_cleanup(ns); nvme_ns_cleanup(ns);
} }
if (n->subsys) {
nvme_subsys_unregister_ctrl(n->subsys, n);
}
g_free(n->cq); g_free(n->cq);
g_free(n->sq); g_free(n->sq);
g_free(n->aer_reqs); g_free(n->aer_reqs);

View File

@ -50,6 +50,7 @@ typedef struct NvmeSubsystem {
} NvmeSubsystem; } NvmeSubsystem;
int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp); int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp);
void nvme_subsys_unregister_ctrl(NvmeSubsystem *subsys, NvmeCtrl *n);
static inline NvmeCtrl *nvme_subsys_ctrl(NvmeSubsystem *subsys, static inline NvmeCtrl *nvme_subsys_ctrl(NvmeSubsystem *subsys,
uint32_t cntlid) uint32_t cntlid)

View File

@ -32,6 +32,11 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp)
return cntlid; return cntlid;
} }
void nvme_subsys_unregister_ctrl(NvmeSubsystem *subsys, NvmeCtrl *n)
{
subsys->ctrls[n->cntlid] = NULL;
}
static void nvme_subsys_setup(NvmeSubsystem *subsys) static void nvme_subsys_setup(NvmeSubsystem *subsys)
{ {
const char *nqn = subsys->params.nqn ? const char *nqn = subsys->params.nqn ?