diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/tlan.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index c99ce74a7aff..3af5b92b48c8 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c | |||
@@ -465,7 +465,7 @@ static struct pci_driver tlan_driver = { | |||
465 | 465 | ||
466 | static int __init tlan_probe(void) | 466 | static int __init tlan_probe(void) |
467 | { | 467 | { |
468 | static int pad_allocated; | 468 | int rc = -ENODEV; |
469 | 469 | ||
470 | printk(KERN_INFO "%s", tlan_banner); | 470 | printk(KERN_INFO "%s", tlan_banner); |
471 | 471 | ||
@@ -473,17 +473,22 @@ static int __init tlan_probe(void) | |||
473 | 473 | ||
474 | if (TLanPadBuffer == NULL) { | 474 | if (TLanPadBuffer == NULL) { |
475 | printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n"); | 475 | printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n"); |
476 | return -ENOMEM; | 476 | rc = -ENOMEM; |
477 | goto err_out; | ||
477 | } | 478 | } |
478 | 479 | ||
479 | memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE); | 480 | memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE); |
480 | pad_allocated = 1; | ||
481 | 481 | ||
482 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n"); | 482 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n"); |
483 | 483 | ||
484 | /* Use new style PCI probing. Now the kernel will | 484 | /* Use new style PCI probing. Now the kernel will |
485 | do most of this for us */ | 485 | do most of this for us */ |
486 | pci_register_driver(&tlan_driver); | 486 | rc = pci_register_driver(&tlan_driver); |
487 | |||
488 | if (rc != 0) { | ||
489 | printk(KERN_ERR "TLAN: Could not register pci driver.\n"); | ||
490 | goto err_out_pci_free; | ||
491 | } | ||
487 | 492 | ||
488 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n"); | 493 | TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n"); |
489 | TLan_EisaProbe(); | 494 | TLan_EisaProbe(); |
@@ -493,11 +498,17 @@ static int __init tlan_probe(void) | |||
493 | tlan_have_pci, tlan_have_eisa); | 498 | tlan_have_pci, tlan_have_eisa); |
494 | 499 | ||
495 | if (TLanDevicesInstalled == 0) { | 500 | if (TLanDevicesInstalled == 0) { |
496 | pci_unregister_driver(&tlan_driver); | 501 | rc = -ENODEV; |
497 | pci_free_consistent(NULL, TLAN_MIN_FRAME_SIZE, TLanPadBuffer, TLanPadBufferDMA); | 502 | goto err_out_pci_unreg; |
498 | return -ENODEV; | ||
499 | } | 503 | } |
500 | return 0; | 504 | return 0; |
505 | |||
506 | err_out_pci_unreg: | ||
507 | pci_unregister_driver(&tlan_driver); | ||
508 | err_out_pci_free: | ||
509 | pci_free_consistent(NULL, TLAN_MIN_FRAME_SIZE, TLanPadBuffer, TLanPadBufferDMA); | ||
510 | err_out: | ||
511 | return rc; | ||
501 | } | 512 | } |
502 | 513 | ||
503 | 514 | ||