|
@@ -465,7 +465,7 @@ static struct pci_driver tlan_driver = {
|
|
|
|
|
|
static int __init tlan_probe(void)
|
|
|
{
|
|
|
- static int pad_allocated;
|
|
|
+ int rc = -ENODEV;
|
|
|
|
|
|
printk(KERN_INFO "%s", tlan_banner);
|
|
|
|
|
@@ -473,17 +473,22 @@ static int __init tlan_probe(void)
|
|
|
|
|
|
if (TLanPadBuffer == NULL) {
|
|
|
printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n");
|
|
|
- return -ENOMEM;
|
|
|
+ rc = -ENOMEM;
|
|
|
+ goto err_out;
|
|
|
}
|
|
|
|
|
|
memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE);
|
|
|
- pad_allocated = 1;
|
|
|
|
|
|
TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n");
|
|
|
|
|
|
/* Use new style PCI probing. Now the kernel will
|
|
|
do most of this for us */
|
|
|
- pci_register_driver(&tlan_driver);
|
|
|
+ rc = pci_register_driver(&tlan_driver);
|
|
|
+
|
|
|
+ if (rc != 0) {
|
|
|
+ printk(KERN_ERR "TLAN: Could not register pci driver.\n");
|
|
|
+ goto err_out_pci_free;
|
|
|
+ }
|
|
|
|
|
|
TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n");
|
|
|
TLan_EisaProbe();
|
|
@@ -493,11 +498,17 @@ static int __init tlan_probe(void)
|
|
|
tlan_have_pci, tlan_have_eisa);
|
|
|
|
|
|
if (TLanDevicesInstalled == 0) {
|
|
|
- pci_unregister_driver(&tlan_driver);
|
|
|
- pci_free_consistent(NULL, TLAN_MIN_FRAME_SIZE, TLanPadBuffer, TLanPadBufferDMA);
|
|
|
- return -ENODEV;
|
|
|
+ rc = -ENODEV;
|
|
|
+ goto err_out_pci_unreg;
|
|
|
}
|
|
|
return 0;
|
|
|
+
|
|
|
+err_out_pci_unreg:
|
|
|
+ pci_unregister_driver(&tlan_driver);
|
|
|
+err_out_pci_free:
|
|
|
+ pci_free_consistent(NULL, TLAN_MIN_FRAME_SIZE, TLanPadBuffer, TLanPadBufferDMA);
|
|
|
+err_out:
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
|