Skip to content

Commit

Permalink
i7core_edac: Avoid doing multiple probes for the same card
Browse files Browse the repository at this point in the history
As Nehalem/Nehalem-EP/Westmere devices uses several devices for the same
functionality (memory controller), the default way of proping devices doesn't
work. So, instead of a per-device probe, all devices should be probed at once.

This means that we should block any new attempt of probe, otherwise, it will
try to register the same device several times.

Acked-by: Doug Thompson <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
Mauro Carvalho Chehab committed Jul 2, 2010
1 parent bda1428 commit 2d95d81
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions drivers/edac/i7core_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -1947,21 +1947,26 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev,
* 0 for FOUND a device
* < 0 for error code
*/

static int probed = 0;

static int __devinit i7core_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{
int dev_idx = id->driver_data;
int rc;
struct i7core_dev *i7core_dev;

/* get the pci devices we want to reserve for our use */
mutex_lock(&i7core_edac_lock);

/*
* All memory controllers are allocated at the first pass.
*/
if (unlikely(dev_idx >= 1))
if (unlikely(probed >= 1)) {
mutex_unlock(&i7core_edac_lock);
return -EINVAL;

/* get the pci devices we want to reserve for our use */
mutex_lock(&i7core_edac_lock);
}
probed++;

rc = i7core_get_devices(pci_dev_table);
if (unlikely(rc < 0))
Expand Down Expand Up @@ -2033,6 +2038,8 @@ static void __devexit i7core_remove(struct pci_dev *pdev)
i7core_dev->socket);
}
}
probed--;

mutex_unlock(&i7core_edac_lock);
}

Expand Down

0 comments on commit 2d95d81

Please sign in to comment.