diff options
| -rw-r--r-- | drivers/edac/amd64_edac.c | 23 |
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) | |||
| 3014 | static int __init amd64_edac_init(void) | 3014 | static 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 | ||
| 3049 | err_2nd_stage: | 3056 | err_2nd_stage: |
| 3050 | debugf0("2nd stage failed\n"); | ||
| 3051 | pci_unregister_driver(&amd64_pci_driver); | 3057 | pci_unregister_driver(&amd64_pci_driver); |
| 3052 | 3058 | err_pci: | |
| 3059 | msrs_free(msrs); | ||
| 3060 | msrs = NULL; | ||
| 3061 | err_ret: | ||
| 3053 | return err; | 3062 | return err; |
| 3054 | } | 3063 | } |
| 3055 | 3064 | ||
