From: Jonathan Cameron <jic23@kernel.org>
To: Ivan Mikhaylov <i.mikhaylov@yadro.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
Jean Delvare <jdelvare@suse.com>,
Guenter Roeck <linux@roeck-us.net>,
<linux-kernel@vger.kernel.org>, <linux-iio@vger.kernel.org>,
<linux-hwmon@vger.kernel.org>
Subject: Re: [PATCH 3/4] iio: proximity: vncl3020: remove mutex from vcnl3020_data
Date: Sun, 2 May 2021 18:53:57 +0100 [thread overview]
Message-ID: <20210502185357.2d868cd2@jic23-huawei> (raw)
In-Reply-To: <20210430152419.261757-4-i.mikhaylov@yadro.com>
On Fri, 30 Apr 2021 18:24:18 +0300
Ivan Mikhaylov <i.mikhaylov@yadro.com> wrote:
> Remove the mutex from vcnl3020_data structure and change it on
> iio_device_claim_direct_mode/iio_device_release_direct_mode.
>
> Signed-off-by: Ivan Mikhaylov <i.mikhaylov@yadro.com>
I'm not keen on doing this. The reason is that
iio_device_claim_direct_mode() is today implemented via a mutex which could
be used as you have it here, but... It might not be in the future.
I can see we might for example optimize it to allow multiple concurrent
accesses that assume direct mode.
So don't make assumptions about what it does. It should be used if
you are protecting against the device entering (or already being in) a buffered
mode, but nothing else.
If other scope is needed, then stick to a local lock. It's perfectly
fine to claim direct mode and take a lock of course if you are protecting
against different things.
Jonathan
> ---
> drivers/iio/proximity/vcnl3020.c | 40 ++++++++++++++++++--------------
> 1 file changed, 22 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/iio/proximity/vcnl3020.c b/drivers/iio/proximity/vcnl3020.c
> index 0dfa6a0b5eec..bff59c7af966 100644
> --- a/drivers/iio/proximity/vcnl3020.c
> +++ b/drivers/iio/proximity/vcnl3020.c
> @@ -71,13 +71,11 @@ static const int vcnl3020_prox_sampling_frequency[][2] = {
> * @regmap: device register map.
> * @dev: vcnl3020 device.
> * @rev: revision id.
> - * @lock: lock for protecting access to device hardware registers.
> */
> struct vcnl3020_data {
> struct regmap *regmap;
> struct device *dev;
> u8 rev;
> - struct mutex lock;
> };
>
> /**
> @@ -149,7 +147,6 @@ static int vcnl3020_init(struct vcnl3020_data *data)
> }
>
> data->rev = reg;
> - mutex_init(&data->lock);
>
> return vcnl3020_get_and_apply_property(data,
> vcnl3020_led_current_property);
> @@ -161,11 +158,9 @@ static int vcnl3020_measure_proximity(struct vcnl3020_data *data, int *val)
> unsigned int reg;
> __be16 res;
>
> - mutex_lock(&data->lock);
> -
> rc = regmap_write(data->regmap, VCNL_COMMAND, VCNL_PS_OD);
> if (rc)
> - goto err_unlock;
> + return rc;
>
> /* wait for data to become ready */
> rc = regmap_read_poll_timeout(data->regmap, VCNL_COMMAND, reg,
> @@ -174,20 +169,17 @@ static int vcnl3020_measure_proximity(struct vcnl3020_data *data, int *val)
> if (rc) {
> dev_err(data->dev,
> "Error (%d) reading vcnl3020 command register\n", rc);
> - goto err_unlock;
> + return rc;
> }
>
> /* high & low result bytes read */
> rc = regmap_bulk_read(data->regmap, VCNL_PS_RESULT_HI, &res,
> sizeof(res));
> if (rc)
> - goto err_unlock;
> + return rc;
>
> *val = be16_to_cpu(res);
>
> -err_unlock:
> - mutex_unlock(&data->lock);
> -
> return rc;
> }
>
> @@ -450,25 +442,37 @@ static int vcnl3020_read_raw(struct iio_dev *indio_dev,
> int rc;
> struct vcnl3020_data *data = iio_priv(indio_dev);
>
> + rc = iio_device_claim_direct_mode(indio_dev);
> + if (rc)
> + return rc;
> +
> switch (mask) {
> case IIO_CHAN_INFO_RAW:
>
> /* Protect against event capture. */
> - if (vcnl3020_is_in_periodic_mode(data))
> - return -EBUSY;
> + if (vcnl3020_is_in_periodic_mode(data)) {
> + rc = -EBUSY;
> + goto end;
> + }
>
> rc = vcnl3020_measure_proximity(data, val);
> if (rc)
> - return rc;
> - return IIO_VAL_INT;
> + goto end;
> + rc = IIO_VAL_INT;
> + goto end;
> case IIO_CHAN_INFO_SAMP_FREQ:
> rc = vcnl3020_read_proxy_samp_freq(data, val, val2);
> if (rc < 0)
> - return rc;
> - return IIO_VAL_INT_PLUS_MICRO;
> + goto end;
> + rc = IIO_VAL_INT_PLUS_MICRO;
> + goto end;
> default:
> - return -EINVAL;
> + rc = -EINVAL;
> }
> +
> +end:
> + iio_device_release_direct_mode(indio_dev);
> + return rc;
> }
>
> static int vcnl3020_write_raw(struct iio_dev *indio_dev,
next prev parent reply other threads:[~2021-05-02 17:53 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-30 15:24 [PATCH 0/4] add periodic mode, threshold options and hwmon Ivan Mikhaylov
2021-04-30 15:24 ` [PATCH 1/4] iio: proximity: vcnl3020: add periodic mode Ivan Mikhaylov
2021-05-01 18:48 ` Andy Shevchenko
2021-05-02 18:00 ` Jonathan Cameron
2021-05-04 19:07 ` Ivan Mikhaylov
2021-05-05 8:22 ` Jonathan Cameron
2021-04-30 15:24 ` [PATCH 2/4] iio: proximity: vcnl3020: add threshold options Ivan Mikhaylov
2021-05-01 18:51 ` Andy Shevchenko
2021-04-30 15:24 ` [PATCH 3/4] iio: proximity: vncl3020: remove mutex from vcnl3020_data Ivan Mikhaylov
2021-05-01 18:53 ` Andy Shevchenko
2021-05-02 17:53 ` Jonathan Cameron [this message]
2021-04-30 15:24 ` [PATCH 4/4] hwmon: vcnl3020: add hwmon driver for intrusion sensor Ivan Mikhaylov
2021-04-30 16:38 ` Guenter Roeck
2021-05-04 19:46 ` Ivan Mikhaylov
2021-05-05 8:26 ` Jonathan Cameron
2021-05-05 14:02 ` Guenter Roeck
2021-05-17 17:08 ` Ivan Mikhaylov
2021-05-01 7:07 ` kernel test robot
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=20210502185357.2d868cd2@jic23-huawei \
--to=jic23@kernel.org \
--cc=i.mikhaylov@yadro.com \
--cc=jdelvare@suse.com \
--cc=lars@metafoo.de \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=pmeerw@pmeerw.net \
/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