From 7ba2c60e4534ec9d281c822f63903cf8cc408c75 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Tue, 1 Feb 2011 16:24:35 -0500 Subject: [PATCH] --- yaml --- r: 286239 b: refs/heads/master c: 574e8b95bc3780e10e9b5e9d51074d503dd3d5d9 h: refs/heads/master i: 286237: 6bbbc35006387e3c16f8d162e92b08744589eb76 286235: 8449a198ce54e1ff40e916da6ac990cd13092614 286231: 9329473155fac21342c6d1b5a14a1d556d855365 286223: 2acc8f41963b34e80131e9375859267a8ec9de2f 286207: 9e886a4ae99180ccd4d9d29c75c164d16c64d3c0 v: v3 --- [refs] | 2 +- trunk/drivers/block/nvme.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index eb314e0139c6..1c4c605124c3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2930353f9f2b9e4629e935acd970cb73c1171229 +refs/heads/master: 574e8b95bc3780e10e9b5e9d51074d503dd3d5d9 diff --git a/trunk/drivers/block/nvme.c b/trunk/drivers/block/nvme.c index 46f872021369..bda91178f475 100644 --- a/trunk/drivers/block/nvme.c +++ b/trunk/drivers/block/nvme.c @@ -1088,7 +1088,7 @@ static void nvme_release_instance(struct nvme_dev *dev) static int __devinit nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) { - int result = -ENOMEM; + int bars, result = -ENOMEM; struct nvme_dev *dev; dev = kzalloc(sizeof(*dev), GFP_KERNEL); @@ -1106,6 +1106,9 @@ static int __devinit nvme_probe(struct pci_dev *pdev, if (pci_enable_device_mem(pdev)) goto free; pci_set_master(pdev); + bars = pci_select_bars(pdev, IORESOURCE_MEM); + if (pci_request_selected_regions(pdev, bars, "nvme")) + goto disable; INIT_LIST_HEAD(&dev->namespaces); dev->pci_dev = pdev; @@ -1118,7 +1121,7 @@ static int __devinit nvme_probe(struct pci_dev *pdev, dev->bar = ioremap(pci_resource_start(pdev, 0), 8192); if (!dev->bar) { result = -ENOMEM; - goto disable; + goto disable_msix; } result = nvme_configure_admin_queue(dev); @@ -1135,10 +1138,12 @@ static int __devinit nvme_probe(struct pci_dev *pdev, nvme_free_queues(dev); unmap: iounmap(dev->bar); - disable: + disable_msix: pci_disable_msix(pdev); nvme_release_instance(dev); + disable: pci_disable_device(pdev); + pci_release_regions(pdev); free: kfree(dev->queues); kfree(dev->entry); @@ -1154,6 +1159,7 @@ static void __devexit nvme_remove(struct pci_dev *pdev) iounmap(dev->bar); nvme_release_instance(dev); pci_disable_device(pdev); + pci_release_regions(pdev); kfree(dev->queues); kfree(dev->entry); kfree(dev);