diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 01:38:43 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 08:57:06 -0800 |
commit | e8a491b401dbbc5af9fe6483dc558d76343bfbb3 (patch) | |
tree | bdc79f181103a01a6d5b3af0476a5328db0c4edb /drivers/edac | |
parent | 3847bccce80c8a01d7adbad9961564252207302a (diff) | |
download | lwn-e8a491b401dbbc5af9fe6483dc558d76343bfbb3.tar.gz lwn-e8a491b401dbbc5af9fe6483dc558d76343bfbb3.zip |
[PATCH] EDAC: i82860 cleanup
- Fix i82860_init() so it cleans up properly on failure.
- Fix i82860_exit() so it cleans up properly.
- Fix typo in comment (i.e. www.redhat.com.com).
Signed-off-by: David S. Peterson <dsp@llnl.gov>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/i82860_edac.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/edac/i82860_edac.c b/drivers/edac/i82860_edac.c index b0c05ad73067..e832778fc603 100644 --- a/drivers/edac/i82860_edac.c +++ b/drivers/edac/i82860_edac.c @@ -62,8 +62,6 @@ static const struct i82860_dev_info i82860_devs[] = { static struct pci_dev *mci_pdev = NULL; /* init dev: in case that AGP code has already registered driver */ -static int i82860_registered = 1; - static void i82860_get_error_info (struct mem_ctl_info *mci, struct i82860_error_info *info) { @@ -265,24 +263,33 @@ static int __init i82860_init(void) debugf3("%s()\n", __func__); if ((pci_rc = pci_register_driver(&i82860_driver)) < 0) - return pci_rc; + goto fail0; if (!mci_pdev) { - i82860_registered = 0; mci_pdev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82860_0, NULL); if (mci_pdev == NULL) { debugf0("860 pci_get_device fail\n"); - return -ENODEV; + pci_rc = -ENODEV; + goto fail1; } pci_rc = i82860_init_one(mci_pdev, i82860_pci_tbl); if (pci_rc < 0) { debugf0("860 init fail\n"); - pci_dev_put(mci_pdev); - return -ENODEV; + pci_rc = -ENODEV; + goto fail1; } } return 0; + +fail1: + pci_unregister_driver(&i82860_driver); + +fail0: + if (mci_pdev != NULL) + pci_dev_put(mci_pdev); + + return pci_rc; } static void __exit i82860_exit(void) @@ -290,10 +297,9 @@ static void __exit i82860_exit(void) debugf3("%s()\n", __func__); pci_unregister_driver(&i82860_driver); - if (!i82860_registered) { - i82860_remove_one(mci_pdev); + + if (mci_pdev != NULL) pci_dev_put(mci_pdev); - } } module_init(i82860_init); @@ -301,5 +307,5 @@ module_exit(i82860_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR - ("Red Hat Inc. (http://www.redhat.com.com) Ben Woodard <woodard@redhat.com>"); + ("Red Hat Inc. (http://www.redhat.com) Ben Woodard <woodard@redhat.com>"); MODULE_DESCRIPTION("ECC support for Intel 82860 memory hub controllers"); |