Message ID | 20240206134000.23561-2-pstanner@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | Make PCI's devres API more consistent | expand |
@Bjorn: Hey Bjorn, are we good with this series? Any more wishes or suggestions? P. On Tue, 2024-02-06 at 14:39 +0100, Philipp Stanner wrote: > Changes in v3: > - Use the term "PCI devres API" in some forgotten places. > - Fix more grammar errors in patch #3. > - Remove the comment advising to call (the outdated) pcim_intx() in > pci.c > - Rename __pcim_request_region_range() flags-field "exclusive" to > "req_flags", since this is what the int actually represents. > - Remove the call to pcim_region_request() from patch #10. (Hans) > > Changes in v2: > - Make commit head lines congruent with PCI's style (Bjorn) > - Add missing error checks for devm_add_action(). (Andy) > - Repair the "Returns: " marks for docu generation (Andy) > - Initialize the addr_devres struct with memset(). (Andy) > - Make pcim_intx() a PCI-internal function so that new drivers > won't > be encouraged to use the outdated pci_intx() mechanism. > (Andy / Philipp) > - Fix grammar and spelling (Bjorn) > - Be more precise on why pcim_iomap_table() is problematic (Bjorn) > - Provide the actual structs' and functions' names in the commit > messages (Bjorn) > - Remove redundant variable initializers (Andy) > - Regroup PM bitfield members in struct pci_dev (Andy) > - Make pcim_intx() visible only for the PCI subsystem so that > new > drivers won't use this outdated API (Andy, Myself) > - Add a NOTE to pcim_iomap() to warn about this function being > the onee > xception that does just return NULL. > - Consistently use the term "PCI devres API"; also in Patch #10 > (Bjorn) > > > ¡Hola! > > PCI's devres API suffers several weaknesses: > > 1. There are functions prefixed with pcim_. Those are always managed > counterparts to never-managed functions prefixed with pci_ – or so > one > would like to think. There are some apparently unmanaged functions > (all region-request / release functions, and pci_intx()) which > suddenly become managed once the user has initialized the device > with > pcim_enable_device() instead of pci_enable_device(). This > "sometimes > yes, sometimes no" nature of those functions is confusing and > therefore bug-provoking. In fact, it has already caused a bug in > DRM. > The last patch in this series fixes that bug. > 2. iomappings: Instead of giving each mapping its own callback, the > existing API uses a statically allocated struct tracking one > mapping > per bar. This is not extensible. Especially, you can't create > _ranged_ managed mappings that way, which many drivers want. > 3. Managed request functions only exist as "plural versions" with a > bit-mask as a parameter. That's quite over-engineered considering > that each user only ever mapps one, maybe two bars. > > This series: > - add a set of new "singular" devres functions that use devres the > way > its intended, with one callback per resource. > - deprecates the existing iomap-table mechanism. > - deprecates the hybrid nature of pci_ functions. > - preserves backwards compatibility so that drivers using the > existing > API won't notice any changes. > - adds documentation, especially some warning users about the > complicated nature of PCI's devres. > > > Note that this series is based on my "unify pci_iounmap"-series from > a > few weeks ago. [1] > > I tested this on a x86 VM with a simple pci test-device with two > regions. Operates and reserves resources as intended on my system. > Kasan and kmemleak didn't find any problems. > > I believe this series cleans the API up as much as possible without > having to port all existing drivers to the new API. Especially, I > think > that this implementation is easy to extend if the need for new > managed > functions arises :) > > Greetings, > P. > > Philipp Stanner (10): > PCI: Add new set of devres functions > PCI: Deprecate iomap-table functions > PCI: Warn users about complicated devres nature > PCI: Make devres region requests consistent > PCI: Move dev-enabled status bit to struct pci_dev > PCI: Move pinned status bit to struct pci_dev > PCI: Give pcim_set_mwi() its own devres callback > PCI: Give pci(m)_intx its own devres callback > PCI: Remove legacy pcim_release() > drm/vboxvideo: fix mapping leaks > > drivers/gpu/drm/vboxvideo/vbox_main.c | 20 +- > drivers/pci/devres.c | 1015 +++++++++++++++++++++-- > -- > drivers/pci/iomap.c | 18 + > drivers/pci/pci.c | 123 ++- > drivers/pci/pci.h | 25 +- > include/linux/pci.h | 18 +- > 6 files changed, 1004 insertions(+), 215 deletions(-) >
On Thu, Feb 29, 2024 at 09:31:20AM +0100, Philipp Stanner wrote: > @Bjorn: > Hey Bjorn, are we good with this series? Any more wishes or > suggestions? Sorry, haven't had a chance to go through it yet. FWIW, I just tried to apply these on top of pci/devres, but it failed here: Applying: PCI: Add new set of devres functions Applying: PCI: Deprecate iomap-table functions Applying: PCI: Warn users about complicated devres nature Applying: PCI: Make devres region requests consistent Applying: PCI: Move dev-enabled status bit to struct pci_dev error: patch failed: drivers/pci/pci.h:811 error: drivers/pci/pci.h: patch does not apply Patch failed at 0005 PCI: Move dev-enabled status bit to struct pci_dev Haven't investigated, so maybe it's some trivial easily fixed thing. Bjorn
On Thu, 2024-02-29 at 14:57 -0600, Bjorn Helgaas wrote: > On Thu, Feb 29, 2024 at 09:31:20AM +0100, Philipp Stanner wrote: > > @Bjorn: > > Hey Bjorn, are we good with this series? Any more wishes or > > suggestions? > > Sorry, haven't had a chance to go through it yet. > > FWIW, I just tried to apply these on top of pci/devres, but it failed > here: > > Applying: PCI: Add new set of devres functions > Applying: PCI: Deprecate iomap-table functions > Applying: PCI: Warn users about complicated devres nature > Applying: PCI: Make devres region requests consistent > Applying: PCI: Move dev-enabled status bit to struct pci_dev > error: patch failed: drivers/pci/pci.h:811 > error: drivers/pci/pci.h: patch does not apply > Patch failed at 0005 PCI: Move dev-enabled status bit to struct > pci_dev > > Haven't investigated, so maybe it's some trivial easily fixed thing. For me, based on Linus's master, this applies with the previous series. It seems to me that this issue only exists on linux-next, the reason being that git searches for struct pci_devres in line 811, but on linux-next, because of previous additions, the struct moved to line 827, and poor git can't find it anymore. I could fix that and provide a v4. P. > > Bjorn >