[PATCH v3] iio: adc: qcom-spmi-adc5-gen3: fix lock annotations on mutex helpers
From: Rupesh Majhi
Date: Sun Oct 25 2026 - 15:15:32 EST
Since commit 5b63d0ae94cc ("compiler-context-analysis: Remove Sparse
support"), __acquires() and __releases() only feed context analysis.
Their argument is parsed before the function body, where only dev is in
scope, so with analysis enabled for this file the build fails:
error: use of undeclared identifier 'adc'
These helpers take and drop the lock for the ADC_TM driver, which only
sees their declarations in the header. Naming the lock there would
mean exposing struct adc5_chip, and with no annotation at all the
analysis flags the unbalanced locking. Mark both __context_unsafe().
Signed-off-by: Rupesh Majhi <zoone.rupert@xxxxxxxxx>
---
Cc: Marco Elver <elver@xxxxxxxxxx>
Cc: Bart Van Assche <bvanassche@xxxxxxx>
Cc: Jishnu Prakash <jishnu.prakash@xxxxxxxxxxxxxxxx>
v3: drop Fixes tag (Jonathan), trailer cleanup (Andy)
v2: __context_unsafe() explained in commit message (Andy)
https://lore.kernel.org/linux-iio/20261021052435.112686-1-zoone.rupert@xxxxxxxxx/
v1: https://lore.kernel.org/linux-iio/20261003214516.128573-1-zoone.rupert@xxxxxxxxx/
Found by building with CONTEXT_ANALYSIS_qcom-spmi-adc5-gen3.o=y, which the
driver does not set today. Enabling it comes later, with the IIO core
annotations. Build tested only, no hardware here. Patch and commit
message drafted with an LLM coding assistant.
drivers/iio/adc/qcom-spmi-adc5-gen3.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
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: c9dbe2a47f635465c9985b7af74d2ae310e98125
--
2.43.0