Re: [PATCH] iio: adc: qcom-spmi-adc5-gen3: fix lock annotations on mutex helpers

From: Jonathan Cameron

Date: Sun Oct 18 2026 - 19:45:25 EST


On Sun, 4 Oct 2026 11:42:56 +0300
Andy Shevchenko <andriy.shevchenko@xxxxxxxxx> wrote:

> On Sun, Oct 04, 2026 at 12:45:16AM +0300, Rupesh Majhi wrote:
> > The __acquires() and __releases() on adc5_gen3_mutex_lock() and
> > adc5_gen3_mutex_unlock() name adc, a local declared in the body. With
> > context analysis enabled for this file, the build fails:
> >
> > error: use of undeclared identifier 'adc'
> >
> > The lock and unlock are split across these two helpers for the ADC_TM
> > driver, so mark them __context_unsafe() instead.
>
> Doesn't sound right to me. The __acquires() and __releases() IIRC are sparse
> annotations. If clang has something special, it needs to be addressed in
> the compiler-clang.h, no?
>
It's in compiler-context-analysis.h and for now I believe is clang
only. Reuses the older sparse definitions. I think the intent is to avoid
churn.

I currently have no idea if this is the right fix. The only users
today are places where a lock is intentionally skipped.

+CC Marco and Bart and putting back the patch content for context.

> diff --git a/drivers/iio/adc/qcom-spmi-adc5-gen3.c b/drivers/iio/adc/qcom-spmi-adc5-gen3.c
> index c68c6c5f6aca..6a3cabedf4e8 100644
> --- a/drivers/iio/adc/qcom-spmi-adc5-gen3.c
> +++ b/drivers/iio/adc/qcom-spmi-adc5-gen3.c
> @@ -663,7 +663,7 @@ static int adc5_gen3_add_aux_tm_device(struct adc5_chip *adc)
> }
>
> void adc5_gen3_mutex_lock(struct device *dev)
> - __acquires(&adc->lock)
> + __context_unsafe(/* returns with adc->lock held */)
> {
> struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
> struct adc5_chip *adc = iio_priv(indio_dev);
> @@ -673,7 +673,7 @@ void adc5_gen3_mutex_lock(struct device *dev)
> EXPORT_SYMBOL_NS_GPL(adc5_gen3_mutex_lock, "QCOM_SPMI_ADC5_GEN3");
>
> void adc5_gen3_mutex_unlock(struct device *dev)
> - __releases(&adc->lock)
> + __context_unsafe(/* releases adc->lock */)
> {
> struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
> struct adc5_chip *adc = iio_priv(indio_dev);
>
> base-commit: 04434a1d0f311d76b1f15fa987918b471a0b8c6a
> --
> 2.43.0