Message ID | 5e56bdc3.1c69fb81.c3b20.9153@mx.google.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | iio: adc: max1363: replace mlock with own lock | expand |
On Thu, 2020-02-27 at 00:19 +0530, Rohit Sarkar wrote: > [External] > > This change replaces indio_dev's mlock with the drivers own lock. In > each case the lock is needed to protect the driver's own state. > > Signed-off-by: Rohit Sarkar <rohitsarkar5398@gmail.com> > --- > drivers/iio/adc/max1363.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c > index 5c2cc61b666e..b9557f957f3c 100644 > --- a/drivers/iio/adc/max1363.c > +++ b/drivers/iio/adc/max1363.c > @@ -169,6 +169,7 @@ struct max1363_state { > const struct max1363_mode *current_mode; > u32 requestedmask; > struct regulator *reg; > + struct mutex lock; The 'lock' field should be aligned with *reg & requestedmask. Also, it's a good idea to do a 'mutex_init(&st->lock)' in max1363_probe(). Somewhere after 'st = iio_priv(indio_dev);' Rest looks good > > /* Using monitor modes and buffer at the same time is > currently not supported */ > @@ -364,7 +365,7 @@ static int max1363_read_single_chan(struct iio_dev > *indio_dev, > struct max1363_state *st = iio_priv(indio_dev); > struct i2c_client *client = st->client; > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->lock); > /* > * If monitor mode is enabled, the method for reading a single > * channel will have to be rather different and has not yet > @@ -405,7 +406,7 @@ static int max1363_read_single_chan(struct iio_dev > *indio_dev, > } > *val = data; > error_ret: > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->lock); > return ret; > > } > @@ -705,9 +706,9 @@ static ssize_t max1363_monitor_store_freq(struct device > *dev, > if (!found) > return -EINVAL; > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->mlock); > st->monitor_speed = i; > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->mlock); > > return 0; > } > @@ -810,12 +811,12 @@ static int max1363_read_event_config(struct iio_dev > *indio_dev, > int val; > int number = chan->channel; > > - mutex_lock(&indio_dev->mlock); > + mutex_lock(&st->mlock); > if (dir == IIO_EV_DIR_FALLING) > val = (1 << number) & st->mask_low; > else > val = (1 << number) & st->mask_high; > - mutex_unlock(&indio_dev->mlock); > + mutex_unlock(&st->mlock); > > return val; > }
On Thu, Feb 27, 2020 at 07:00:31AM +0000, Ardelean, Alexandru wrote: > On Thu, 2020-02-27 at 00:19 +0530, Rohit Sarkar wrote: > > [External] > > > > This change replaces indio_dev's mlock with the drivers own lock. In > > each case the lock is needed to protect the driver's own state. > > > > Signed-off-by: Rohit Sarkar <rohitsarkar5398@gmail.com> > > --- > > drivers/iio/adc/max1363.c | 13 +++++++------ > > 1 file changed, 7 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c > > index 5c2cc61b666e..b9557f957f3c 100644 > > --- a/drivers/iio/adc/max1363.c > > +++ b/drivers/iio/adc/max1363.c > > @@ -169,6 +169,7 @@ struct max1363_state { > > const struct max1363_mode *current_mode; > > u32 requestedmask; > > struct regulator *reg; > > + struct mutex lock; > > The 'lock' field should be aligned with *reg & requestedmask. Ah yes, dont know how I missed that. > Also, it's a good idea to do a 'mutex_init(&st->lock)' in max1363_probe(). > Somewhere after 'st = iio_priv(indio_dev);' Will do > Rest looks good > Thanks, Rohit
diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c index 5c2cc61b666e..b9557f957f3c 100644 --- a/drivers/iio/adc/max1363.c +++ b/drivers/iio/adc/max1363.c @@ -169,6 +169,7 @@ struct max1363_state { const struct max1363_mode *current_mode; u32 requestedmask; struct regulator *reg; + struct mutex lock; /* Using monitor modes and buffer at the same time is currently not supported */ @@ -364,7 +365,7 @@ static int max1363_read_single_chan(struct iio_dev *indio_dev, struct max1363_state *st = iio_priv(indio_dev); struct i2c_client *client = st->client; - mutex_lock(&indio_dev->mlock); + mutex_lock(&st->lock); /* * If monitor mode is enabled, the method for reading a single * channel will have to be rather different and has not yet @@ -405,7 +406,7 @@ static int max1363_read_single_chan(struct iio_dev *indio_dev, } *val = data; error_ret: - mutex_unlock(&indio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -705,9 +706,9 @@ static ssize_t max1363_monitor_store_freq(struct device *dev, if (!found) return -EINVAL; - mutex_lock(&indio_dev->mlock); + mutex_lock(&st->mlock); st->monitor_speed = i; - mutex_unlock(&indio_dev->mlock); + mutex_unlock(&st->mlock); return 0; } @@ -810,12 +811,12 @@ static int max1363_read_event_config(struct iio_dev *indio_dev, int val; int number = chan->channel; - mutex_lock(&indio_dev->mlock); + mutex_lock(&st->mlock); if (dir == IIO_EV_DIR_FALLING) val = (1 << number) & st->mask_low; else val = (1 << number) & st->mask_high; - mutex_unlock(&indio_dev->mlock); + mutex_unlock(&st->mlock); return val; }
This change replaces indio_dev's mlock with the drivers own lock. In each case the lock is needed to protect the driver's own state. Signed-off-by: Rohit Sarkar <rohitsarkar5398@gmail.com> --- drivers/iio/adc/max1363.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)