Skip to content

gpiolib: use a read-write semaphore to protect the GPIO device list

Bartosz Golaszewski linux-gpio lkml 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest3 patches 6 repliesIn review
  2. v12 patches 1 replySuperseded

Changes in v2 from the cover letter

- add patch 1/3 to fix a release timing issue

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3gpiolib: remove the GPIO device from the list when it's unregistereddrivers/gpio/gpiolib.c+3 -31 reply
2/3gpiolib: replace the GPIO device mutex with a read-write semaphoredrivers/gpio/gpiolib-sysfs.c drivers/gpio/gpiolib.c drivers/gpio/gpiolib.h+11 -111 reply
3/3gpiolib: pin GPIO devices in place during descriptor lookupdrivers/gpio/gpiolib.c+23 -173 replies

Reviews trailers per patch

All 3 patches have a Reviewed-by or Acked-by.

PatchLinus Walleij
1/3R-b
2/3R-b
3/3R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 0/3] gpiolib: use a read-write semaphore to protect the GPIO device list

From: Bartosz Golaszewski <[email protected]>

I'm still figuring out how to keep GPIO descriptors coherent while (mostly) lockless. In the meantime, I found a potential race-condition during GPIO descriptor lookup and also figured that the correct way to protect the GPIO device list is actually a read-write semaphore as we're not modifying the list very often and readers should be able to iterate over it concurrently.

The first patch in this series is new in v2. I realized that we must not wait until .release() to remove the GPIO device from the list as this is why pinning down the GPIO device list during lookup would never work - we always could end up re-taking a reference to an object that was being released if it got looked up between when the last reference is dropped and the object is finally removed from the device list.

v1 -> v2:
- add patch 1/3 to fix a release timing issue

Bartosz Golaszewski (3):
gpiolib: remove the GPIO device from the list when it's unregistered
gpiolib: replace the GPIO device mutex with a read-write semaphore
gpiolib: pin GPIO devices in place during descriptor lookup

 drivers/gpio/gpiolib-sysfs.c |  2 +-
 drivers/gpio/gpiolib.c       | 62 ++++++++++++++++++++----------------
 drivers/gpio/gpiolib.h       |  2 +-
 3 files changed, 36 insertions(+), 30 deletions(-)
Signature · 1 line
2.40.1