Re: [PATCH] gpio: cdev: fix waitqueue deadlock on chip deregistration
From: Bartosz Golaszewski
Date: Thu Nov 05 2026 - 11:14:43 EST
On Thu, Nov 05, 2026 at 10:57:11PM +0800, Kent Gibson wrote:
> On Thu, Nov 05, 2026 at 03:47:59PM +0100, Bartosz Golaszewski wrote:
> > The three calls to wait_event_interruptible_locked() sleep while holding
> > gdev->srcu. In gpiochip_remove(), synchronize_srcu() runs before
> > gcdev_unregister(). The latter fires the waitqueue wakeup events from
> > the notifier callbacks, so a reader blocked on an empty FIFO never leaves
> > its SRCU section and the removal will block forever in the former.
> >
> > Since rcu_access_pointer() is a plain READ_ONCE(), we don't really need
> > to take the SRCU read lock. We don't access the chip structure after
> > checking it. Remove the lock and instead make the waitqueue aware of the
> > possible chip deregistration. Keep the initial gdev->chip checks as
> > removing them may change the error codes visible to user-space, for
> > instance in cases of a non-blocking read on an empty fifo.
> >
> > Ideally, we'd factor out the common code into a dedicated helper but
> > there doesn't seem to exist a clean way of passing a kfifo as argument
> > so let's open-code the three call sites.
> >
> > Cc: stable@xxxxxxxxxxxxxxx
> > Fixes: d83cee3d2bb1 ("gpio: protect the pointer to gpio_chip in gpio_device with SRCU")
> > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxxxxxxxx>
> > ---
> > I've had it on my TODO list for a while. I vaguely remember someone
> > reporting it to me but can't find the reference anymore. Please feel
> > free to add a Reported-by: and Closes:.
> >
>
> Isn't this the same as patch 4/7 in Adrian's series[1]?
>
Dang it, yes indeed. Which may explain why I had it written down for
some reason and thought I was supposed to fix it.
Nevermind this patch.
Bart