aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/amd64_edac.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index fb0d36b47411..a8af27a74825 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -3014,25 +3014,29 @@ static void amd64_setup_pci_device(void)
3014static int __init amd64_edac_init(void) 3014static int __init amd64_edac_init(void)
3015{ 3015{
3016 int nb, err = -ENODEV; 3016 int nb, err = -ENODEV;
3017 bool load_ok = false;
3017 3018
3018 edac_printk(KERN_INFO, EDAC_MOD_STR, EDAC_AMD64_VERSION "\n"); 3019 edac_printk(KERN_INFO, EDAC_MOD_STR, EDAC_AMD64_VERSION "\n");
3019 3020
3020 opstate_init(); 3021 opstate_init();
3021 3022
3022 if (cache_k8_northbridges() < 0) 3023 if (cache_k8_northbridges() < 0)
3023 return err; 3024 goto err_ret;
3024 3025
3025 msrs = msrs_alloc(); 3026 msrs = msrs_alloc();
3027 if (!msrs)
3028 goto err_ret;
3026 3029
3027 err = pci_register_driver(&amd64_pci_driver); 3030 err = pci_register_driver(&amd64_pci_driver);
3028 if (err) 3031 if (err)
3029 return err; 3032 goto err_pci;
3030 3033
3031 /* 3034 /*
3032 * At this point, the array 'pvt_lookup[]' contains pointers to alloc'd 3035 * At this point, the array 'pvt_lookup[]' contains pointers to alloc'd
3033 * amd64_pvt structs. These will be used in the 2nd stage init function 3036 * amd64_pvt structs. These will be used in the 2nd stage init function
3034 * to finish initialization of the MC instances. 3037 * to finish initialization of the MC instances.
3035 */ 3038 */
3039 err = -ENODEV;
3036 for (nb = 0; nb < num_k8_northbridges; nb++) { 3040 for (nb = 0; nb < num_k8_northbridges; nb++) {
3037 if (!pvt_lookup[nb]) 3041 if (!pvt_lookup[nb])
3038 continue; 3042 continue;
@@ -3040,16 +3044,21 @@ static int __init amd64_edac_init(void)
3040 err = amd64_init_2nd_stage(pvt_lookup[nb]); 3044 err = amd64_init_2nd_stage(pvt_lookup[nb]);
3041 if (err) 3045 if (err)
3042 goto err_2nd_stage; 3046 goto err_2nd_stage;
3043 }
3044 3047
3045 amd64_setup_pci_device(); 3048 load_ok = true;
3049 }
3046 3050
3047 return 0; 3051 if (load_ok) {
3052 amd64_setup_pci_device();
3053 return 0;
3054 }
3048 3055
3049err_2nd_stage: 3056err_2nd_stage:
3050 debugf0("2nd stage failed\n");
3051 pci_unregister_driver(&amd64_pci_driver); 3057 pci_unregister_driver(&amd64_pci_driver);
3052 3058err_pci:
3059 msrs_free(msrs);
3060 msrs = NULL;
3061err_ret:
3053 return err; 3062 return err;
3054} 3063}
3055 3064