Skip to content

Commit

Permalink
i7core_edac: need mci->edac_check, otherwise module removal doesn't work
Browse files Browse the repository at this point in the history
There are some locking troubles with edac_core: if you don't declare an
edac_check, module may suffer from soft lock.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed May 10, 2010
1 parent 7b029d0 commit 87d1d27
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions drivers/edac/i7core_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,15 @@ static int i7core_get_devices(struct mem_ctl_info *mci, struct pci_dev *mcidev)
return 0;
}

/*
* i7core_check_error Retrieve and process errors reported by the
* hardware. Called by the Core module.
*/
static void i7core_check_error(struct mem_ctl_info *mci)
{
/* FIXME: need a real code here */
}

/*
* i7core_probe Probe for ONE instance of device to see if it is
* present.
Expand Down Expand Up @@ -912,8 +921,11 @@ static int __devinit i7core_probe(struct pci_dev *pdev,

debugf0("MC: " __FILE__ ": %s(): mci = %p\n", __func__, mci);

/* 'get' the pci devices we want to reserve for our use */
if (i7core_get_devices(mci, pdev))
goto fail0;

mci->dev = &pdev->dev; /* record ptr to the generic device */
dev_set_drvdata(mci->dev, mci);

pvt = mci->pvt_info;

Expand All @@ -932,9 +944,8 @@ static int __devinit i7core_probe(struct pci_dev *pdev,
mci->ctl_page_to_phys = NULL;
mci->mc_driver_sysfs_attributes = i7core_inj_attrs;

/* 'get' the pci devices we want to reserve for our use */
if (i7core_get_devices(mci, pdev))
goto fail0;
/* Set the function pointer to an actual operation function */
mci->edac_check = i7core_check_error;

/* add this new MC control structure to EDAC's list of MCs */
if (edac_mc_add_mc(mci)) {
Expand Down Expand Up @@ -992,6 +1003,7 @@ static void __devexit i7core_remove(struct pci_dev *pdev)
edac_pci_release_generic_ctl(i7core_pci);

mci = edac_mc_del_mc(&pdev->dev);

if (!mci)
return;

Expand Down

0 comments on commit 87d1d27

Please sign in to comment.