NVMe: Request I/O regions
Calling pci_request_selected_regions() reserves these regions for our use. Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
This commit is contained in:
parent
2930353f9f
commit
574e8b95bc
|
@ -1088,7 +1088,7 @@ static void nvme_release_instance(struct nvme_dev *dev)
|
||||||
static int __devinit nvme_probe(struct pci_dev *pdev,
|
static int __devinit nvme_probe(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *id)
|
const struct pci_device_id *id)
|
||||||
{
|
{
|
||||||
int result = -ENOMEM;
|
int bars, result = -ENOMEM;
|
||||||
struct nvme_dev *dev;
|
struct nvme_dev *dev;
|
||||||
|
|
||||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
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))
|
if (pci_enable_device_mem(pdev))
|
||||||
goto free;
|
goto free;
|
||||||
pci_set_master(pdev);
|
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);
|
INIT_LIST_HEAD(&dev->namespaces);
|
||||||
dev->pci_dev = pdev;
|
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);
|
dev->bar = ioremap(pci_resource_start(pdev, 0), 8192);
|
||||||
if (!dev->bar) {
|
if (!dev->bar) {
|
||||||
result = -ENOMEM;
|
result = -ENOMEM;
|
||||||
goto disable;
|
goto disable_msix;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = nvme_configure_admin_queue(dev);
|
result = nvme_configure_admin_queue(dev);
|
||||||
|
@ -1135,10 +1138,12 @@ static int __devinit nvme_probe(struct pci_dev *pdev,
|
||||||
nvme_free_queues(dev);
|
nvme_free_queues(dev);
|
||||||
unmap:
|
unmap:
|
||||||
iounmap(dev->bar);
|
iounmap(dev->bar);
|
||||||
disable:
|
disable_msix:
|
||||||
pci_disable_msix(pdev);
|
pci_disable_msix(pdev);
|
||||||
nvme_release_instance(dev);
|
nvme_release_instance(dev);
|
||||||
|
disable:
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
|
pci_release_regions(pdev);
|
||||||
free:
|
free:
|
||||||
kfree(dev->queues);
|
kfree(dev->queues);
|
||||||
kfree(dev->entry);
|
kfree(dev->entry);
|
||||||
|
@ -1154,6 +1159,7 @@ static void __devexit nvme_remove(struct pci_dev *pdev)
|
||||||
iounmap(dev->bar);
|
iounmap(dev->bar);
|
||||||
nvme_release_instance(dev);
|
nvme_release_instance(dev);
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
|
pci_release_regions(pdev);
|
||||||
kfree(dev->queues);
|
kfree(dev->queues);
|
||||||
kfree(dev->entry);
|
kfree(dev->entry);
|
||||||
kfree(dev);
|
kfree(dev);
|
||||||
|
|
Loading…
Reference in a new issue