diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 04:38:50 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:07 -0500 |
commit | 18dbc337af5d6efd30cb9291e74722c8ad134fd3 (patch) | |
tree | 10163d19960173d29deb7a9d931dfcdfe2188975 /drivers/edac/i82875p_edac.c | |
parent | 472678ebd30d87cbe8d97562dcc0e46d1076040f (diff) |
[PATCH] EDAC: protect memory controller list
- Fix code so we always hold mem_ctls_mutex while we are stepping
through the list of mem_ctl_info structures. Otherwise bad things
may happen if one task is stepping through the list while another
task is modifying it. We may eventually want to use reference
counting to manage the mem_ctl_info structures. In the meantime we
may as well fix this bug.
- Don't disable interrupts while we are walking the list of
mem_ctl_info structures in check_mc_devices(). This is unnecessary.
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/i82875p_edac.c')
-rw-r--r-- | drivers/edac/i82875p_edac.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/edac/i82875p_edac.c b/drivers/edac/i82875p_edac.c index 40ba2be6169a..aad1900a4689 100644 --- a/drivers/edac/i82875p_edac.c +++ b/drivers/edac/i82875p_edac.c | |||
@@ -452,7 +452,7 @@ static void __devexit i82875p_remove_one(struct pci_dev *pdev) | |||
452 | 452 | ||
453 | debugf0("%s()\n", __func__); | 453 | debugf0("%s()\n", __func__); |
454 | 454 | ||
455 | if ((mci = edac_mc_find_mci_by_pdev(pdev)) == NULL) | 455 | if ((mci = edac_mc_del_mc(pdev)) == NULL) |
456 | return; | 456 | return; |
457 | 457 | ||
458 | pvt = (struct i82875p_pvt *) mci->pvt_info; | 458 | pvt = (struct i82875p_pvt *) mci->pvt_info; |
@@ -467,9 +467,6 @@ static void __devexit i82875p_remove_one(struct pci_dev *pdev) | |||
467 | pci_dev_put(pvt->ovrfl_pdev); | 467 | pci_dev_put(pvt->ovrfl_pdev); |
468 | } | 468 | } |
469 | 469 | ||
470 | if (edac_mc_del_mc(mci)) | ||
471 | return; | ||
472 | |||
473 | edac_mc_free(mci); | 470 | edac_mc_free(mci); |
474 | } | 471 | } |
475 | 472 | ||