]> err.no Git - linux-2.6/blobdiff - drivers/edac/i82860_edac.c
[PATCH] EDAC: protect memory controller list
[linux-2.6] / drivers / edac / i82860_edac.c
index e832778fc603311e715f1a538691100c7f09edd7..688854260a0e72bde108a73717bbd39b0e4f9865 100644 (file)
@@ -134,6 +134,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx)
        int index;
        struct mem_ctl_info *mci = NULL;
        unsigned long last_cumul_size;
+       struct i82860_error_info discard;
 
        u16 mchcfg_ddim;        /* DRAM Data Integrity Mode 0=none,2=edac */
 
@@ -200,8 +201,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx)
                csrow->edac_mode = mchcfg_ddim ? EDAC_SECDED : EDAC_NONE;
        }
 
-       /* clear counters */
-       pci_write_bits16(mci->pdev, I82860_ERRSTS, 0x0003, 0x0003);
+       i82860_get_error_info(mci, &discard);  /* clear counters */
 
        if (edac_mc_add_mc(mci)) {
                debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
@@ -237,9 +237,10 @@ static void __devexit i82860_remove_one(struct pci_dev *pdev)
 
        debugf0("%s()\n", __func__);
 
-       mci = edac_mc_find_mci_by_pdev(pdev);
-       if ((mci != NULL) && (edac_mc_del_mc(mci) == 0))
-               edac_mc_free(mci);
+       if ((mci = edac_mc_del_mc(pdev)) == NULL)
+               return;
+
+       edac_mc_free(mci);
 }
 
 static const struct pci_device_id i82860_pci_tbl[] __devinitdata = {