aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Derrick <jonathan.derrick@intel.com>2017-05-05 16:52:06 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-05-25 09:44:46 -0400
commit6d6a43a086117930b5acd79c9350e00ef56027fa (patch)
treed1d9183e4307188ea7b46756264d0b84ac4fd9ac
parent423f1752a0283b3f54f175be893f610f51b3aaf5 (diff)
nvme: unmap CMB and remove sysfs file in reset path
commit f63572dff1421b6ca6abce71d46e03411e605c94 upstream. CMB doesn't get unmapped until removal while getting remapped on every reset. Add the unmapping and sysfs file removal to the reset path in nvme_pci_disable to match the mapping path in nvme_pci_enable. Fixes: 202021c1a ("nvme : Add sysfs entry for NVMe CMBs when appropriate") Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> Acked-by: Keith Busch <keith.busch@intel.com> Reviewed-By: Stephen Bates <sbates@raithlin.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/nvme/host/pci.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 8a9c186898c7..14eac73e8dbc 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -1384,6 +1384,11 @@ static inline void nvme_release_cmb(struct nvme_dev *dev)
1384 if (dev->cmb) { 1384 if (dev->cmb) {
1385 iounmap(dev->cmb); 1385 iounmap(dev->cmb);
1386 dev->cmb = NULL; 1386 dev->cmb = NULL;
1387 if (dev->cmbsz) {
1388 sysfs_remove_file_from_group(&dev->ctrl.device->kobj,
1389 &dev_attr_cmb.attr, NULL);
1390 dev->cmbsz = 0;
1391 }
1387 } 1392 }
1388} 1393}
1389 1394
@@ -1655,6 +1660,7 @@ static void nvme_pci_disable(struct nvme_dev *dev)
1655{ 1660{
1656 struct pci_dev *pdev = to_pci_dev(dev->dev); 1661 struct pci_dev *pdev = to_pci_dev(dev->dev);
1657 1662
1663 nvme_release_cmb(dev);
1658 pci_free_irq_vectors(pdev); 1664 pci_free_irq_vectors(pdev);
1659 1665
1660 if (pci_is_enabled(pdev)) { 1666 if (pci_is_enabled(pdev)) {
@@ -1993,7 +1999,6 @@ static void nvme_remove(struct pci_dev *pdev)
1993 nvme_dev_disable(dev, true); 1999 nvme_dev_disable(dev, true);
1994 nvme_dev_remove_admin(dev); 2000 nvme_dev_remove_admin(dev);
1995 nvme_free_queues(dev, 0); 2001 nvme_free_queues(dev, 0);
1996 nvme_release_cmb(dev);
1997 nvme_release_prp_pools(dev); 2002 nvme_release_prp_pools(dev);
1998 nvme_dev_unmap(dev); 2003 nvme_dev_unmap(dev);
1999 nvme_put_ctrl(&dev->ctrl); 2004 nvme_put_ctrl(&dev->ctrl);