diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-10 23:58:11 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-10-24 09:20:37 -0400 |
commit | 41ba6c10586dfab632725cd532677ae5ae460e3e (patch) | |
tree | 4d30fa1d5f7818be4e434db1316d0ef94adc8434 /drivers/edac/i7core_edac.c | |
parent | 6ee7dd504490f3dc25cfe1c9be5b6e8895f89a92 (diff) |
i7core_edac: MCE NMI handling should stop first
Otherwise, a NMI may happen causing a race condition and a panic.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/edac/i7core_edac.c')
-rw-r--r-- | drivers/edac/i7core_edac.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c index d2b2ed8915f..e5aa06e6389 100644 --- a/drivers/edac/i7core_edac.c +++ b/drivers/edac/i7core_edac.c | |||
@@ -2070,6 +2070,10 @@ static void __devexit i7core_remove(struct pci_dev *pdev) | |||
2070 | debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n", | 2070 | debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n", |
2071 | __func__, mci, &i7core_dev->pdev[0]->dev); | 2071 | __func__, mci, &i7core_dev->pdev[0]->dev); |
2072 | 2072 | ||
2073 | /* Disable MCE NMI handler */ | ||
2074 | edac_mce_unregister(&pvt->edac_mce); | ||
2075 | |||
2076 | /* Disable EDAC polling */ | ||
2073 | if (likely(pvt->i7core_pci)) | 2077 | if (likely(pvt->i7core_pci)) |
2074 | edac_pci_release_generic_ctl(pvt->i7core_pci); | 2078 | edac_pci_release_generic_ctl(pvt->i7core_pci); |
2075 | else | 2079 | else |
@@ -2078,11 +2082,14 @@ static void __devexit i7core_remove(struct pci_dev *pdev) | |||
2078 | i7core_dev->socket); | 2082 | i7core_dev->socket); |
2079 | pvt->i7core_pci = NULL; | 2083 | pvt->i7core_pci = NULL; |
2080 | 2084 | ||
2085 | /* Remove MC sysfs nodes */ | ||
2081 | edac_mc_del_mc(&i7core_dev->pdev[0]->dev); | 2086 | edac_mc_del_mc(&i7core_dev->pdev[0]->dev); |
2082 | 2087 | ||
2083 | edac_mce_unregister(&pvt->edac_mce); | 2088 | /* Free data */ |
2084 | kfree(mci->ctl_name); | 2089 | kfree(mci->ctl_name); |
2085 | edac_mc_free(mci); | 2090 | edac_mc_free(mci); |
2091 | |||
2092 | /* Release PCI resources */ | ||
2086 | i7core_put_devices(i7core_dev); | 2093 | i7core_put_devices(i7core_dev); |
2087 | } | 2094 | } |
2088 | } | 2095 | } |