Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 807

kernel-2.6.18-238.el5.src.rpm

From: Mauro Carvalho Chehab <mchehab@redhat.com>
Date: Tue, 23 Nov 2010 17:33:58 -0500
Subject: [edac] i7core_edac: use saved pointers
Message-id: <20101123153358.54d2e279@pedra>
Patchwork-id: 29575
O-Subject: [PATCH RHEL5 20/29] BZ#:651869 i7core_edac: Use saved pointers
Bugzilla: 651869
RH-Acked-by: Aristeu Rozanski <aris@redhat.com>

Changeset: 73589c80cd0dab94db50800c4834a8d8522cd54f

We already have saved pointers.  Use shorter ones.

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>

diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
index e9f2a14..b1403a3 100644
--- a/drivers/edac/i7core_edac.c
+++ b/drivers/edac/i7core_edac.c
@@ -1472,10 +1472,6 @@ static int mci_bind_devs(struct mem_ctl_info *mci,
 	struct pci_dev *pdev;
 	int i, func, slot;
 
-	/* Associates i7core_dev and mci for future usage */
-	pvt->i7core_dev = i7core_dev;
-	i7core_dev->mci = mci;
-
 	pvt->is_registered = 0;
 	for (i = 0; i < i7core_dev->n_devs; i++) {
 		pdev = i7core_dev->pdev[i];
@@ -1909,6 +1905,36 @@ static int i7core_mce_check_error(void *priv, struct mce *mce)
 	return 1;
 }
 
+static void i7core_unregister_mci(struct i7core_dev *i7core_dev)
+{
+	struct mem_ctl_info *mci = i7core_dev->mci;
+	struct i7core_pvt *pvt;
+
+	if (unlikely(!mci || !mci->pvt_info)) {
+		debugf0("MC: " __FILE__ ": %s(): dev = %p\n",
+			__func__, &i7core_dev->pdev[0]->dev);
+
+		i7core_printk(KERN_ERR, "Couldn't find mci handler\n");
+		return;
+	}
+
+	pvt = mci->pvt_info;
+
+	debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
+		__func__, mci, &i7core_dev->pdev[0]->dev);
+
+	/* Disable MCE NMI handler */
+	edac_mce_unregister(&pvt->edac_mce);
+
+	/* Remove MC sysfs nodes */
+	edac_mc_del_mc(mci->dev);
+
+	debugf1("%s: free mci struct\n", mci->ctl_name);
+	kfree(mci->ctl_name);
+	edac_mc_free(mci);
+	i7core_dev->mci = NULL;
+}
+
 static int i7core_register_mci(struct i7core_dev *i7core_dev,
 			       const int num_channels, const int num_csrows)
 {
@@ -1994,6 +2020,10 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev,
 		goto fail1;
 	}
 
+	/* Associates i7core_dev and mci for future usage */
+	pvt->i7core_dev = i7core_dev;
+	i7core_dev->mci = mci;
+
 	return 0;
 
 fail1:
@@ -2001,6 +2031,7 @@ fail1:
 fail0:
 	kfree(mci->ctl_name);
 	edac_mc_free(mci);
+	i7core_dev->mci = NULL;
 	return rc;
 }
 
@@ -2055,6 +2086,10 @@ static int __devinit i7core_probe(struct pci_dev *pdev,
 	return 0;
 
 fail1:
+	list_for_each_entry(i7core_dev, &i7core_edac_list, list) {
+		if (i7core_dev->mci)
+			i7core_unregister_mci(i7core_dev);
+	}
 	i7core_put_all_devices();
 fail0:
 	mutex_unlock(&i7core_edac_lock);
@@ -2067,9 +2102,7 @@ fail0:
  */
 static void __devexit i7core_remove(struct pci_dev *pdev)
 {
-	struct mem_ctl_info *mci;
 	struct i7core_dev *i7core_dev;
-	struct i7core_pvt *pvt;
 
 	debugf0(__FILE__ ": %s()\n", __func__);
 
@@ -2089,28 +2122,8 @@ static void __devexit i7core_remove(struct pci_dev *pdev)
 	}
 
 	list_for_each_entry(i7core_dev, &i7core_edac_list, list) {
-		mci = find_mci_by_dev(&i7core_dev->pdev[0]->dev);
-		if (unlikely(!mci || !mci->pvt_info)) {
-			debugf0("MC: " __FILE__ ": %s(): dev = %p\n",
-				__func__, &i7core_dev->pdev[0]->dev);
-
-				i7core_printk(KERN_ERR,
-				      "Couldn't find mci hanler\n");
-		} else {
-			struct i7core_pvt *pvt = mci->pvt_info;
-
-			i7core_dev = pvt->i7core_dev;
-
-			debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
-				__func__, mci, &i7core_dev->pdev[0]->dev);
-
-			/* Disable MCE NMI handler */
-			edac_mce_unregister(&pvt->edac_mce);
-
-			debugf1("%s: free mci struct\n", mci->ctl_name);
-			kfree(mci->ctl_name);
-			edac_mc_free(mci);
-		}
+		if (i7core_dev->mci)
+			i7core_unregister_mci(i7core_dev);
 	}
 
 	/* Release PCI resources */