On Tue, Nov 28, 2023 at 3:21 PM Linus Walleij <linus.walleij@xxxxxxxxxx> wrote: > > On Mon, Nov 27, 2023 at 8:37 PM Bartosz Golaszewski <brgl@xxxxxxxx> wrote: > > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > > > The global list of GPIO devices is never modified or accessed from > > atomic context so it's fine to protect it using a mutex. Add a new > > global lock dedicated to the gpio_devices list and use it whenever > > accessing or modifying it. > > > > While at it: fold the sysfs registering of existing devices into > > gpiolib.c and make gpio_devices static within its compilation unit. > > > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > Nice! I might have found some snag: > > gpio_device_find() still does guard(spinlock_irqsave)(&gpio_lock); > shouldn't that be switched to the mutex? > Good catch! > On top of this I can update my patch to the delete the comment > for gpio_lock to just rename that thing to gpio_descriptor_lock > and document it as such. > No need, this will soon go away anyway. See below. > But when I think about it: gpio[_decriptor]_lock can now (after this > patch) be moved into struct gpio_chip as it is really just protecting > the descriptors on the same chip from simultaneous modification, > especially desc->flags. This is a BIG WIN because it makes it a local > lock not a global one, do you wanna try it or should I? (On top of > these two patches, then.) > I will have the series making locking in GPIOLIB more fine-grained ready tomorrow or on Thursday. It will have separate locks for each descriptor. We will use spinlock or mutex per descriptor depending on the value of gc->can_sleep. I think it should work fine as a sleeping chip can always use a mutex and a non-sleeping one cannot have sleeping callbacks (correct me if I'm wrong). We don't need to lock the GPIO device or chip separately - the descriptor structs will stay alive as long as there's a live reference to the GPIO device. GPIO device will have an SRCU cookie for protecting API calls against removal of the chip. To summarize: one mutex for the GPIO device list, one lock per GPIO descriptor and SRCU protection of the GPIO device's chip. Does it make sense? Bart > Yours, > Linus Walleij