|
@@ -1510,6 +1510,11 @@ static inline void nvme_release_cmb(struct nvme_dev *dev)
|
|
if (dev->cmb) {
|
|
if (dev->cmb) {
|
|
iounmap(dev->cmb);
|
|
iounmap(dev->cmb);
|
|
dev->cmb = NULL;
|
|
dev->cmb = NULL;
|
|
|
|
+ if (dev->cmbsz) {
|
|
|
|
+ sysfs_remove_file_from_group(&dev->ctrl.device->kobj,
|
|
|
|
+ &dev_attr_cmb.attr, NULL);
|
|
|
|
+ dev->cmbsz = 0;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1783,6 +1788,7 @@ static void nvme_pci_disable(struct nvme_dev *dev)
|
|
{
|
|
{
|
|
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
|
struct pci_dev *pdev = to_pci_dev(dev->dev);
|
|
|
|
|
|
|
|
+ nvme_release_cmb(dev);
|
|
pci_free_irq_vectors(pdev);
|
|
pci_free_irq_vectors(pdev);
|
|
|
|
|
|
if (pci_is_enabled(pdev)) {
|
|
if (pci_is_enabled(pdev)) {
|
|
@@ -2188,7 +2194,6 @@ static void nvme_remove(struct pci_dev *pdev)
|
|
nvme_dev_disable(dev, true);
|
|
nvme_dev_disable(dev, true);
|
|
nvme_dev_remove_admin(dev);
|
|
nvme_dev_remove_admin(dev);
|
|
nvme_free_queues(dev, 0);
|
|
nvme_free_queues(dev, 0);
|
|
- nvme_release_cmb(dev);
|
|
|
|
nvme_release_prp_pools(dev);
|
|
nvme_release_prp_pools(dev);
|
|
nvme_dev_unmap(dev);
|
|
nvme_dev_unmap(dev);
|
|
nvme_put_ctrl(&dev->ctrl);
|
|
nvme_put_ctrl(&dev->ctrl);
|