On Thu, 6 Jun 2019 15:13:00 +0200
Pavel Machek <pa...@ucw.cz> wrote:

> (stable removed from cc list)
> 
> > Indio->mlock is used for protecting the different iio device modes.
> > It is currently not being used in this way. Replace the lock with
> > an internal lock specifically used for protecting the SPI transfer
> > buffer.
> > 
> > Signed-off-by: Justin Chen <justinpo...@gmail.com>
> > Signed-off-by: Jonathan Cameron <jonathan.came...@huawei.com>
> > Signed-off-by: Sasha Levin <sas...@kernel.org>
> > ---
> >  drivers/iio/adc/ti-ads7950.c | 19 +++++++++++++++----
> >  1 file changed, 15 insertions(+), 4 deletions(-)
> >   
> 
> > @@ -277,6 +280,7 @@ static irqreturn_t ti_ads7950_trigger_handler(int irq, 
> > void *p)
> >     struct ti_ads7950_state *st = iio_priv(indio_dev);
> >     int ret;
> >  
> > +   mutex_lock(&st->slock);
> >     ret = spi_sync(st->spi, &st->ring_msg);
> >     if (ret < 0)
> >             goto out;
> > @@ -285,6 +289,7 @@ static irqreturn_t ti_ads7950_trigger_handler(int irq, 
> > void *p)
> >                                        iio_get_time_ns(indio_dev));
> >  
> >  out:
> > +   mutex_unlock(&st->slock);
> >     iio_trigger_notify_done(indio_dev->trig);
> >  
> >     return IRQ_HANDLED;  
> 
> Does trigger_handler run from interrupt context? Prototype suggests
> so... If so, it can not really take mutexes...

It's an interrupt thread so taking mutexes should be fine.
For this particular case there is no 'top half' provided to
the call to iio_triggered_buffer_setup so nothing runs in interrupt context.

The spi_sync call can sleep anyway so this code can only run where
sleeping is fine.

Thanks,

Jonathan


> 
> Best regards,
>                                                               Pavel
>                                                               


Reply via email to