提交 06d88e4a 编写于 作者: K Kulikov Vasiliy 提交者: David S. Miller

isdn: mISDN: call pci_disable_device() if pci_probe() failed

Driver should call pci_disable_device() if it returns from pci_probe()
with error.
Signed-off-by: NKulikov Vasiliy <segooon@gmail.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 a5a4405b
...@@ -1094,6 +1094,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1094,6 +1094,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pr_info("mISDN: do not have informations about adapter at %s\n", pr_info("mISDN: do not have informations about adapter at %s\n",
pci_name(pdev)); pci_name(pdev));
kfree(card); kfree(card);
pci_disable_device(pdev);
return -EINVAL; return -EINVAL;
} else } else
pr_notice("mISDN: found adapter %s at %s\n", pr_notice("mISDN: found adapter %s at %s\n",
...@@ -1103,7 +1104,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1103,7 +1104,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_drvdata(pdev, card); pci_set_drvdata(pdev, card);
err = setup_instance(card); err = setup_instance(card);
if (err) { if (err) {
pci_disable_device(card->pdev); pci_disable_device(pdev);
kfree(card); kfree(card);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
} else if (ent->driver_data == INF_SCT_1) { } else if (ent->driver_data == INF_SCT_1) {
...@@ -1114,6 +1115,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1114,6 +1115,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
sc = kzalloc(sizeof(struct inf_hw), GFP_KERNEL); sc = kzalloc(sizeof(struct inf_hw), GFP_KERNEL);
if (!sc) { if (!sc) {
release_card(card); release_card(card);
pci_disable_device(pdev);
return -ENOMEM; return -ENOMEM;
} }
sc->irq = card->irq; sc->irq = card->irq;
...@@ -1121,6 +1123,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1121,6 +1123,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
sc->ci = card->ci + i; sc->ci = card->ci + i;
err = setup_instance(sc); err = setup_instance(sc);
if (err) { if (err) {
pci_disable_device(pdev);
kfree(sc); kfree(sc);
release_card(card); release_card(card);
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册