i7core_edac: Avoid PCI refcount to reach zero on successive load/reload
authorMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 21 Aug 2010 11:52:41 +0000 (08:52 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 24 Oct 2010 13:20:41 +0000 (11:20 -0200)
commita3e1541637f2096ab31af311c53eaeb0853650d3
tree879f49d58f5b36a571950249eb04a80376b0b508
parent79daef2099a02fed35747c23bad22f30441133ea
i7core_edac: Avoid PCI refcount to reach zero on successive load/reload

That's a nasty bug that took me a lot of time to track, and whose
solution took just one line to solve. The best fragrances and the worse
poisons are shipped on the smalest bottles.

The drivers/pci/quick.c implements the pci_get_device function. The normal
behavior is that you call it, the function returns you a pdev pointer
and increment pdev->kobj.kref.refcount of the pci device. However,
if you want to keep searching an object, you need to pass the previous
pdev function to the search.

When you use a not null pointer to pdev "from" field, pci_get_device
will decrement pdev->kobj.kref.refcount, assuming that the driver won't
be using the previous pdev.

The solution is simple: we just need to call pci_dev_get() manually,
for the pdev's that the driver will actually use.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/edac/i7core_edac.c