Linux PCI subsystem development
 help / color / mirror / Atom feed
* [PATCH v7 00/13] Make PCI's devres API more consistent
@ 2024-06-05  8:15 Philipp Stanner
  2024-06-05  8:15 ` [PATCH v7 01/13] PCI: Add and use devres helper for bit masks Philipp Stanner
                   ` (13 more replies)
  0 siblings, 14 replies; 24+ messages in thread
From: Philipp Stanner @ 2024-06-05  8:15 UTC (permalink / raw)
  To: Hans de Goede, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Daniel Vetter, Bjorn Helgaas,
	Sam Ravnborg, dakr
  Cc: dri-devel, linux-kernel, linux-pci, Philipp Stanner

Hello Bjorn,

I tried to meet your requests from the last feedback round as much as
possible. Especially, I removed a lot of code, made almost all
interfaces private and cut the series into smaller chunks where
possible.

Splitting it even smaller is unfortunately not possible because of the
Linux kernel build chain's rule on dead / unused code.

See also the changelog below.

Please tell me if that's enough to move forward here.

Regards,
P.


Changes in v7:
  - Split the entire series in smaller, more atomic chunks / patches
    (Bjorn)
  - Remove functions (such as pcim_iomap_region_range()) that do not yet
    have a user (Bjorn)
  - Don't export interfaces publicly anymore, except for
    pcim_iomap_range(), needed by vboxvideo (Bjorn)
  - Mention the actual (vboxvideo) bug in "PCI: Warn users..." commit
    (Bjorn)
  - Drop docstring warnings on PCI-internal functions (Bjorn)
  - Rework docstring warnings
  - Fix spelling in a few places. Rewrapp paragraphs (Bjorn)

Changes in v6:
  - Restructure the cleanup in pcim_iomap_regions_request_all() so that
    it doesn't trigger a (false positive) test robot warning. No
    behavior change intended. (Dan Carpenter)

Changes in v5:
  - Add Hans's Reviewed-by to vboxvideo patch (Hans de Goede)
  - Remove stable-kernel from CC in vboxvideo patch (Hans de Goede)

Changes in v4:
  - Rebase against linux-next

Changes in v3:
  - Use the term "PCI devres API" at 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 (13):
  PCI: Add and use devres helper for bit masks
  PCI: Add devres helpers for iomap table
  PCI: Reimplement plural devres functions
  PCI: Deprecate two surplus devres functions
  PCI: Make devres region requests consistent
  PCI: Warn users about complicated devres nature
  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()
  PCI: Add pcim_iomap_range()
  drm/vboxvideo: fix mapping leaks

 drivers/gpu/drm/vboxvideo/vbox_main.c |  20 +-
 drivers/pci/devres.c                  | 897 +++++++++++++++++++++-----
 drivers/pci/iomap.c                   |  16 +
 drivers/pci/pci.c                     | 107 ++-
 drivers/pci/pci.h                     |  23 +-
 include/linux/pci.h                   |   6 +-
 6 files changed, 864 insertions(+), 205 deletions(-)

-- 
2.45.0


^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2024-06-14  8:15 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-05  8:15 [PATCH v7 00/13] Make PCI's devres API more consistent Philipp Stanner
2024-06-05  8:15 ` [PATCH v7 01/13] PCI: Add and use devres helper for bit masks Philipp Stanner
2024-06-13 16:57   ` Ilpo Järvinen
2024-06-05  8:15 ` [PATCH v7 02/13] PCI: Add devres helpers for iomap table Philipp Stanner
2024-06-05  8:15 ` [PATCH v7 03/13] PCI: Reimplement plural devres functions Philipp Stanner
2024-06-13 16:54   ` Ilpo Järvinen
2024-06-13 18:45     ` Bjorn Helgaas
2024-06-05  8:15 ` [PATCH v7 04/13] PCI: Deprecate two surplus " Philipp Stanner
2024-06-05  8:15 ` [PATCH v7 05/13] PCI: Make devres region requests consistent Philipp Stanner
2024-06-05  8:15 ` [PATCH v7 06/13] PCI: Warn users about complicated devres nature Philipp Stanner
2024-06-05  8:15 ` [PATCH v7 07/13] PCI: Move dev-enabled status bit to struct pci_dev Philipp Stanner
2024-06-05 21:11   ` Bjorn Helgaas
2024-06-06  7:59     ` Philipp Stanner
2024-06-05  8:16 ` [PATCH v7 08/13] PCI: Move pinned " Philipp Stanner
2024-06-05  8:16 ` [PATCH v7 09/13] PCI: Give pcim_set_mwi() its own devres callback Philipp Stanner
2024-06-13 17:19   ` Ilpo Järvinen
2024-06-14  8:15     ` Philipp Stanner
2024-06-05  8:16 ` [PATCH v7 10/13] PCI: Give pci(m)_intx " Philipp Stanner
2024-06-13 17:23   ` Ilpo Järvinen
2024-06-13 18:47     ` Bjorn Helgaas
2024-06-05  8:16 ` [PATCH v7 11/13] PCI: Remove legacy pcim_release() Philipp Stanner
2024-06-05  8:16 ` [PATCH v7 12/13] PCI: Add pcim_iomap_range() Philipp Stanner
2024-06-05  8:16 ` [PATCH v7 13/13] drm/vboxvideo: fix mapping leaks Philipp Stanner
2024-06-07 19:40 ` [PATCH v7 00/13] Make PCI's devres API more consistent Bjorn Helgaas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox