From: Jonathan Cameron <jic23@kernel.org>
To: <Claudiu.Beznea@microchip.com>
Cc: <Eugen.Hristev@microchip.com>, <lars@metafoo.de>,
<Nicolas.Ferre@microchip.com>, <alexandre.belloni@bootlin.com>,
<robh+dt@kernel.org>, <krzk+dt@kernel.org>,
<ludovic.desroches@atmel.com>, <linux-iio@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 11/16] iio: adc: at91-sama5d2_adc: add locking parameter to at91_adc_read_info_raw()
Date: Tue, 14 Jun 2022 13:02:49 +0100 [thread overview]
Message-ID: <20220614130249.005ad51a@jic23-huawei> (raw)
In-Reply-To: <2989a8a5-b350-aac1-dcfb-249ac5bb23aa@microchip.com>
On Tue, 14 Jun 2022 08:50:14 +0000
<Claudiu.Beznea@microchip.com> wrote:
> On 11.06.2022 20:58, Jonathan Cameron wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> >
> > On Thu, 9 Jun 2022 11:32:08 +0300
> > Claudiu Beznea <claudiu.beznea@microchip.com> wrote:
> >
> >> Add a parameter to at91_adc_read_info_raw() to specify if st->lock mutex
> >> need to be acquired. This prepares for the addition of temperature sensor
> >> code which will re-use at91_adc_read_info_raw() function to read 2 voltages
> >> for determining the real temperature.
> >
> > This looks like a potential lock dependency issue.
> > iio_device_claim_direct_mode() takes an internal iio lock, and
> > you then take st->lock.
> >
> > If you are going to invert that locking order in another path
> > you have a deadlock.
> >
> > So rethink this. If you want to reuse the code you'll need to factor
> > it out to a separate function that takes none of the locks then
> > take all locks needed in each call path (in the same order).
>
> OK, I'll check it.
Hi Claudia,
Minor kernel mailing list etiquette thing is that there is no need
to reply to say you'll check something or that you agree with review
feedback. Just generates more emails to read. Reviewers assume
anything you don't comment on their feedback will be addressed in
next version of the code!
Thanks,
Jonathan
>
> >
> > Jonathan
> >
> >
> >>
> >> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
> >> ---
> >> drivers/iio/adc/at91-sama5d2_adc.c | 15 ++++++++++-----
> >> 1 file changed, 10 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> >> index 1283bcf4e682..8f8fef42de84 100644
> >> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> >> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> >> @@ -1583,7 +1583,8 @@ static irqreturn_t at91_adc_interrupt(int irq, void *private)
> >> }
> >>
> >> static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
> >> - struct iio_chan_spec const *chan, int *val)
> >> + struct iio_chan_spec const *chan, int *val,
> >> + bool lock)
> >> {
> >> struct at91_adc_state *st = iio_priv(indio_dev);
> >> int (*fn)(struct at91_adc_state *, int, u16 *) = NULL;
> >> @@ -1602,13 +1603,15 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
> >> ret = iio_device_claim_direct_mode(indio_dev);
> >> if (ret)
> >> return ret;
> >> - mutex_lock(&st->lock);
> >> + if (lock)
> >> + mutex_lock(&st->lock);
> >>
> >> if (fn) {
> >> ret = fn(st, chan->channel, &tmp_val);
> >> *val = tmp_val;
> >> ret = at91_adc_adjust_val_osr(st, val);
> >> - mutex_unlock(&st->lock);
> >> + if (lock)
> >> + mutex_unlock(&st->lock);
> >> iio_device_release_direct_mode(indio_dev);
> >>
> >> return ret;
> >> @@ -1644,7 +1647,8 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
> >> /* Needed to ACK the DRDY interruption */
> >> at91_adc_readl(st, LCDR);
> >>
> >> - mutex_unlock(&st->lock);
> >> + if (lock)
> >> + mutex_unlock(&st->lock);
> >>
> >> iio_device_release_direct_mode(indio_dev);
> >> return ret;
> >> @@ -1658,7 +1662,8 @@ static int at91_adc_read_raw(struct iio_dev *indio_dev,
> >>
> >> switch (mask) {
> >> case IIO_CHAN_INFO_RAW:
> >> - return at91_adc_read_info_raw(indio_dev, chan, val);
> >> + return at91_adc_read_info_raw(indio_dev, chan, val, true);
> >> +
> >> case IIO_CHAN_INFO_SCALE:
> >> *val = st->vref_uv / 1000;
> >> if (chan->differential)
> >
>
next prev parent reply other threads:[~2022-06-14 11:53 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-09 8:31 [PATCH 00/16] iio: adc: at91-sama5d2_adc: add support for temperature sensor Claudiu Beznea
2022-06-09 8:31 ` [PATCH 01/16] iio: adc: at91-sama5d2_adc: fix AT91_SAMA5D2_MR_TRACKTIM_MAX Claudiu Beznea
2022-06-09 8:31 ` [PATCH 02/16] iio: adc: at91-sama5d2_adc: lock around oversampling and sample freq Claudiu Beznea
2022-06-11 17:30 ` Jonathan Cameron
2022-06-14 8:19 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 03/16] iio: adc: at91-sama5d2_adc: exit from write_raw() when buffers are enabled Claudiu Beznea
2022-06-11 17:33 ` Jonathan Cameron
2022-06-14 8:19 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 04/16] iio: adc: at91-sama5d2_adc: handle different EMR.OSR for different hw versions Claudiu Beznea
2022-06-11 17:46 ` Jonathan Cameron
2022-06-14 8:20 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 05/16] iio: adc: at91-sama5d2_adc: adjust osr based on specific platform data Claudiu Beznea
2022-06-09 8:32 ` [PATCH 06/16] iio: adc: at91-sama5d2_adc: add 64 and 256 oversampling ratio Claudiu Beznea
2022-06-11 17:47 ` Jonathan Cameron
2022-06-14 8:22 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 07/16] iio: adc: at91-sama5d2_adc: simplify the code in at91_adc_read_info_raw() Claudiu Beznea
2022-06-11 17:54 ` Jonathan Cameron
2022-06-14 8:49 ` Claudiu.Beznea
2022-06-14 12:00 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 08/16] iio: adc: at91-sama5d2_adc: move oversampling storage in its function Claudiu Beznea
2022-06-09 8:32 ` [PATCH 09/16] iio: adc: at91-sama5d2_adc: update trackx on emr Claudiu Beznea
2022-06-09 8:32 ` [PATCH 10/16] iio: adc: at91-sama5d2_adc: add startup and tracktim as parameter for at91_adc_setup_samp_freq() Claudiu Beznea
2022-06-09 8:32 ` [PATCH 11/16] iio: adc: at91-sama5d2_adc: add locking parameter to at91_adc_read_info_raw() Claudiu Beznea
2022-06-11 17:58 ` Jonathan Cameron
2022-06-14 8:50 ` Claudiu.Beznea
2022-06-14 12:02 ` Jonathan Cameron [this message]
2022-06-09 8:32 ` [PATCH 12/16] dt-bindings: iio: adc: at91-sama5d2_adc: add id for temperature channel Claudiu Beznea
2022-06-16 16:00 ` Rob Herring
2022-06-09 8:32 ` [PATCH 13/16] iio: adc: at91-sama5d2_adc: add support for temperature sensor Claudiu Beznea
2022-06-11 18:15 ` Jonathan Cameron
2022-06-14 10:13 ` Claudiu.Beznea
2022-06-14 12:10 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 14/16] iio: adc: at91-sama5d2_adc: add empty line after functions Claudiu Beznea
2022-06-09 8:32 ` [PATCH 15/16] iio: adc: at91-sama5d2_adc: add runtime pm support Claudiu Beznea
2022-06-11 16:48 ` Jonathan Cameron
2022-06-14 10:40 ` Claudiu.Beznea
2022-06-14 12:14 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 16/16] iio: adc: at91-sama5d2_adc: use pm_ptr() Claudiu Beznea
2022-06-11 16:40 ` Jonathan Cameron
2022-06-11 18:16 ` [PATCH 00/16] iio: adc: at91-sama5d2_adc: add support for temperature sensor Jonathan Cameron
2022-06-14 10:41 ` Claudiu.Beznea
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220614130249.005ad51a@jic23-huawei \
--to=jic23@kernel.org \
--cc=Claudiu.Beznea@microchip.com \
--cc=Eugen.Hristev@microchip.com \
--cc=Nicolas.Ferre@microchip.com \
--cc=alexandre.belloni@bootlin.com \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ludovic.desroches@atmel.com \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).