[PATCH 01/15] iio: adc: ad_sigma_delta: do not use internal iio_dev lock

Miquel Raynal miquel.raynal at bootlin.com
Tue Sep 20 04:54:10 PDT 2022


Hi Nuno,

nuno.sa at analog.com wrote on Tue, 20 Sep 2022 13:28:07 +0200:

> Drop 'mlock' usage by making use of iio_device_claim_direct_mode().
> This change actually makes sure we cannot do a single conversion while
> buffering is enable. Note there was a potential race in the previous
> code since we were only acquiring the lock after checking if the bus is
> enabled.
> 
> Fixes: af3008485ea0 ("iio:adc: Add common code for ADI Sigma Deltadevices")

To answer your question in the cover letter, I feel like this Fixes:
tag is deserved.

Reviewed-by: Miquel Raynal <miquel.raynal at bootlin.com>

> Signed-off-by: Nuno Sá <nuno.sa at analog.com>
> ---
>  drivers/iio/adc/ad_sigma_delta.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
> index 261a9a6b45e1..d8570f620785 100644
> --- a/drivers/iio/adc/ad_sigma_delta.c
> +++ b/drivers/iio/adc/ad_sigma_delta.c
> @@ -281,10 +281,10 @@ int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
>  	unsigned int data_reg;
>  	int ret = 0;
>  
> -	if (iio_buffer_enabled(indio_dev))
> -		return -EBUSY;
> +	ret = iio_device_claim_direct_mode(indio_dev);
> +	if (ret)
> +		return ret;
>  
> -	mutex_lock(&indio_dev->mlock);
>  	ad_sigma_delta_set_channel(sigma_delta, chan->address);
>  
>  	spi_bus_lock(sigma_delta->spi->master);
> @@ -323,7 +323,7 @@ int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
>  	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE);
>  	sigma_delta->bus_locked = false;
>  	spi_bus_unlock(sigma_delta->spi->master);
> -	mutex_unlock(&indio_dev->mlock);
> +	iio_device_release_direct_mode(indio_dev);
>  
>  	if (ret)
>  		return ret;


Thanks,
Miquèl



More information about the linux-arm-kernel mailing list