Re: [PATCH] 2.6 PPC64 EEH unbalanced dev_get/put calls

From: linas
Date: Tue Jul 06 2004 - 15:52:27 EST


On Sat, Jul 03, 2004 at 03:13:02PM +1000, Paul Mackerras wrote:
> Linas,
>
> > This patch fixes some unbalanaced usage of pci_dev_get()/pci_dev_put() calls
> > in the eeh code. The old code had too many calls to dev_put, which could
> > cause memory structs to be freed prematurely, possibly leading to bad
> > bad pointer derefs in certain cases.
>
> When I apply this I end up with one pci_dev_get() call in
> __pci_addr_cache_insert_device and no pci_dev_put() calls. That can't
> be right, surely? If it is it needs a big fat comment explaining why.


No, that's right. The device is gotten for the length of time that
it is in the cache, and is put when it is removed from the cache.
In this way, the device is not free()'ed as long as the cache holds
a reference to it.

I can add a comment, but it seemed 'obvious' from the description of the
cache that it would be holding a reference to the device for an indefinite
period of time.

The patch was really to fix the result of a misunderstanding of what
the poorly-named routine "pci_get_device()" does: yes, it does a get(),
but it also does a put(), which one wouldn't guess from the name :(

A better name for this might be "pci_next_device()" or
"pci_obtain_device()" or something like that ...


> > Cross-ref LTC bug 9283
> Confused - that's the bug about not using ibm,fw-phb-id.

Oops.

--linas

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/