Re: [PATCH] gpiolib: don't call sleeping functions with a spinlock taken

From: Andy Shevchenko
Date: Tue Apr 28 2020 - 11:53:28 EST


On Tue, Apr 14, 2020 at 6:35 PM Bartosz Golaszewski
<bgolaszewski@xxxxxxxxxxxx> wrote:
>
> wt., 14 kwi 2020 o 14:00 Linus Walleij <linus.walleij@xxxxxxxxxx> napisaÅ(a):
> >
> > On Fri, Mar 20, 2020 at 10:31 AM Bartosz Golaszewski <brgl@xxxxxxxx> wrote:
> >
> > > From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>
> > >
> > > We must not call pinctrl_gpio_can_use_line() with the gpio_lock taken
> > > as it takes a mutex internally. Let's move the call before taking the
> > > spinlock and store the return value.
> > >
> > > This isn't perfect - there's a moment between calling
> > > pinctrl_gpio_can_use_line() and taking the spinlock where the situation
> > > can change but it isn't a regression either: previously this part wasn't
> > > protected at all and it only affects the information user-space is
> > > seeing.

It seems I have no original at hand, so, commenting here.

It looks like we need a mutex less function which can be used here and
in the call you are considering racy.
Note, mutex followed by spin lock is fine, other way around is not.

So, here you should have something like

mutex_lock
ok_for_gpio = ...
spin_lock
...
spin_unlock
mutex_unlock.


--
With Best Regards,
Andy Shevchenko