On Tue, Jan 2, 2024 at 4:59 PM Bartosz Golaszewski <brgl@xxxxxxxx> wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > 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(-) > > -- > 2.40.1 > Series applied. Bart