On Fri, Mar 17, 2017 at 08:41:11PM +0530, sayli karnik wrote: > iio_dev->mlock should be used by the IIO core only for protecting > device operating mode changes. ie. Changes between INDIO_DIRECT_MODE, > INDIO_BUFFER_* modes. > Replace mlock with a lock in the device's global data to protect > hardware state changes. Hi Sayli, There are nested locks here, hence deadlock. I'm wondering if we can grab the lock once at the top layers (read/write_raw functions) and hold it. Seems like that's a pattern in IIO drivers. Let's see what the reviewers suggest on this one. alisons > > Signed-off-by: sayli karnik <karniksayli1995@xxxxxxxxx> > --- > drivers/staging/iio/meter/ade7758_core.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/staging/iio/meter/ade7758_core.c b/drivers/staging/iio/meter/ade7758_core.c > index 99c89e6..1723eb8 100644 > --- a/drivers/staging/iio/meter/ade7758_core.c > +++ b/drivers/staging/iio/meter/ade7758_core.c > @@ -522,13 +522,14 @@ static int ade7758_read_raw(struct iio_dev *indio_dev, > int *val2, > long mask) > { > + struct ade7758_state *st = iio_priv(indio_dev); > int ret; > > switch (mask) { > case IIO_CHAN_INFO_SAMP_FREQ: > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->buf_lock); > ret = ade7758_read_samp_freq(&indio_dev->dev, val); > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->buf_lock); > return ret; > default: > return -EINVAL; > @@ -541,15 +542,16 @@ static int ade7758_write_raw(struct iio_dev *indio_dev, > struct iio_chan_spec const *chan, > int val, int val2, long mask) > { > + struct ade7758_state *st = iio_priv(indio_dev); > int ret; > > switch (mask) { > case IIO_CHAN_INFO_SAMP_FREQ: > if (val2) > return -EINVAL; > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->buf_lock); > ret = ade7758_write_samp_freq(&indio_dev->dev, val); > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->buf_lock); > return ret; > default: > return -EINVAL; > -- > 2.7.4 > > -- > You received this message because you are subscribed to the Google Groups "outreachy-kernel" group. > To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@xxxxxxxxxxxxxxxx. > To post to this group, send email to outreachy-kernel@xxxxxxxxxxxxxxxx. > To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/20170317151110.GA26848%40sayli-HP-15-Notebook-PC. > For more options, visit https://groups.google.com/d/optout. -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html