cxgb3: do not use PCI resources before pci_enable_device()
IRQ and resource[] may not have correct values until after PCI hotplug setup occurs at pci_enable_device() time. The semantic match that finds this problem is as follows: // <smpl> @@ identifier x; identifier request ~= "pci_request.*|pci_resource.*"; @@ ( * x->irq | * x->resource | * request(x, ...) ) ... *pci_enable_device(x) // </smpl> Signed-off-by: Kulikov Vasiliy <segooon@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
3cfc2c42c1
Коммит
7aaaaa1e44
|
@ -3198,17 +3198,17 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|||
}
|
||||
}
|
||||
|
||||
err = pci_enable_device(pdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "cannot enable PCI device\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = pci_request_regions(pdev, DRV_NAME);
|
||||
if (err) {
|
||||
/* Just info, some other driver may have claimed the device. */
|
||||
dev_info(&pdev->dev, "cannot obtain PCI resources\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = pci_enable_device(pdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "cannot enable PCI device\n");
|
||||
goto out_release_regions;
|
||||
goto out_disable_device;
|
||||
}
|
||||
|
||||
if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
|
||||
|
@ -3217,11 +3217,11 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|||
if (err) {
|
||||
dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
|
||||
"coherent allocations\n");
|
||||
goto out_disable_device;
|
||||
goto out_release_regions;
|
||||
}
|
||||
} else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
|
||||
dev_err(&pdev->dev, "no usable DMA configuration\n");
|
||||
goto out_disable_device;
|
||||
goto out_release_regions;
|
||||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
@ -3234,7 +3234,7 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|||
adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
|
||||
if (!adapter) {
|
||||
err = -ENOMEM;
|
||||
goto out_disable_device;
|
||||
goto out_release_regions;
|
||||
}
|
||||
|
||||
adapter->nofail_skb =
|
||||
|
@ -3370,11 +3370,12 @@ out_free_dev:
|
|||
out_free_adapter:
|
||||
kfree(adapter);
|
||||
|
||||
out_disable_device:
|
||||
pci_disable_device(pdev);
|
||||
out_release_regions:
|
||||
pci_release_regions(pdev);
|
||||
out_disable_device:
|
||||
pci_disable_device(pdev);
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче