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 */