|
@@ -1663,6 +1663,9 @@ static void nvme_map_cmb(struct nvme_dev *dev)
|
|
|
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
|
|
int bar;
|
|
|
|
|
|
+ if (dev->cmb_size)
|
|
|
+ return;
|
|
|
+
|
|
|
dev->cmbsz = readl(dev->bar + NVME_REG_CMBSZ);
|
|
|
if (!dev->cmbsz)
|
|
|
return;
|
|
@@ -2147,7 +2150,6 @@ static void nvme_pci_disable(struct nvme_dev *dev)
|
|
|
{
|
|
|
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
|
|
|
|
|
- nvme_release_cmb(dev);
|
|
|
pci_free_irq_vectors(pdev);
|
|
|
|
|
|
if (pci_is_enabled(pdev)) {
|
|
@@ -2595,6 +2597,7 @@ static void nvme_remove(struct pci_dev *pdev)
|
|
|
nvme_stop_ctrl(&dev->ctrl);
|
|
|
nvme_remove_namespaces(&dev->ctrl);
|
|
|
nvme_dev_disable(dev, true);
|
|
|
+ nvme_release_cmb(dev);
|
|
|
nvme_free_host_mem(dev);
|
|
|
nvme_dev_remove_admin(dev);
|
|
|
nvme_free_queues(dev, 0);
|