From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org
Cc: "Mudit Sharma" <muditsharma.info@gmail.com>,
"Julien Stephan" <jstephan@baylibre.com>,
"Mariel Tinaco" <Mariel.Tinaco@analog.com>,
"Angelo Dureghello" <adureghello@baylibre.com>,
"Gustavo Silva" <gustavograzs@gmail.com>,
"Nuno Sa" <nuno.sa@analog.com>,
"João Paulo Gonçalves" <joao.goncalves@toradex.com>,
"ChiYuan Huang" <cy_huang@richtek.com>,
"Ramona Alexandra Nechita" <ramona.nechita@analog.com>,
"Trevor Gamblin" <tgamblin@baylibre.com>,
"Guillaume Stols" <gstols@baylibre.com>,
"David Lechner" <dlechner@baylibre.com>,
"Cosmin Tanislav" <demonsingur@gmail.com>,
"Marcelo Schmitt" <marcelo.schmitt@analog.com>,
"Gwendal Grignou" <gwendal@chromium.org>,
"Antoni Pokusinski" <apokusinski01@gmail.com>,
"Tomasz Duszynski" <tomasz.duszynski@octakon.com>,
"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: [PATCH 01/27] iio: core: Rework claim and release of direct mode to work with sparse.
Date: Tue, 4 Feb 2025 20:02:23 +0000 [thread overview]
Message-ID: <20250204200250.636721-2-jic23@kernel.org> (raw)
In-Reply-To: <20250204200250.636721-1-jic23@kernel.org>
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Initial thought was to do something similar to __cond_lock()
do_iio_device_claim_direct_mode(iio_dev) ? : ({ __acquire(iio_dev); 0; })
+ Appropriate static inline iio_device_release_direct_mode()
However with that, sparse generates false positives. E.g.
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c:1811:17: warning: context imbalance in 'st_lsm6dsx_read_raw' - unexpected unlock
So instead, this patch rethinks the return type and makes it more
'conditional lock like' (which is part of what is going on under the hood
anyway) and return a boolean - true for successfully acquired, false for
did not acquire.
To allow a migration path given the rework is now non trivial, take a leaf
out of the naming of the conditional guard we currently have for IIO
device direct mode and drop the _mode postfix from the new functions giving
iio_device_claim_direct() and iio_device_release_direct()
Whilst the kernel supports __cond_acquires() upstream sparse does not
yet do so. Hence rely on sparse expanding a static inline wrapper
to explicitly see whether __acquire() is called.
Note that even with the solution here, sparse sometimes gives false
positives. However in the few cases seen they were complex code
structures that benefited from simplification anyway.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
v1: (Non RFC). Drop the __cond_acquires and __releases markings
as sparse support is not yet available.
---
include/linux/iio/iio.h | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 56161e02f002..fe33835b19cf 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -662,6 +662,31 @@ int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
int iio_device_claim_direct_mode(struct iio_dev *indio_dev);
void iio_device_release_direct_mode(struct iio_dev *indio_dev);
+/*
+ * Helper functions that allow claim and release of direct mode
+ * in a fashion that doesn't generate many false positives from sparse.
+ * Note this must remain static inline in the header so that sparse
+ * can see the __acquire() marking. Revisit when sparse supports
+ * __cond_acquires()
+ */
+static inline bool iio_device_claim_direct(struct iio_dev *indio_dev)
+{
+ int ret = iio_device_claim_direct_mode(indio_dev);
+
+ if (ret)
+ return false;
+
+ __acquire(iio_dev);
+
+ return true;
+}
+
+static inline void iio_device_release_direct(struct iio_dev *indio_dev)
+{
+ iio_device_release_direct_mode(indio_dev);
+ __release(indio_dev);
+}
+
/*
* This autocleanup logic is normally used via
* iio_device_claim_direct_scoped().
--
2.48.1
next prev parent reply other threads:[~2025-02-04 20:03 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-04 20:02 [PATCH 00/27] iio: improve handling of direct mode claim and release Jonathan Cameron
2025-02-04 20:02 ` Jonathan Cameron [this message]
2025-02-05 23:03 ` [PATCH 01/27] iio: core: Rework claim and release of direct mode to work with sparse David Lechner
2025-02-04 20:02 ` [PATCH 02/27] iio: chemical: scd30: Use guard(mutex) to allow early returns Jonathan Cameron
2025-02-05 23:05 ` David Lechner
2025-02-04 20:02 ` [PATCH 03/27] iio: chemical: scd30: Switch to sparse friendly claim/release_direct() Jonathan Cameron
2025-02-04 20:02 ` [PATCH 04/27] iio: temperature: tmp006: Stop using iio_device_claim_direct_scoped() Jonathan Cameron
2025-02-04 20:02 ` [PATCH 05/27] iio: proximity: sx9310: " Jonathan Cameron
2025-02-05 19:00 ` Gwendal Grignou
2025-02-04 20:02 ` [PATCH 06/27] iio: proximity: sx9324: " Jonathan Cameron
2025-02-05 19:00 ` Gwendal Grignou
2025-02-04 20:02 ` [PATCH 07/27] iio: proximity: sx9360: " Jonathan Cameron
2025-02-05 19:01 ` Gwendal Grignou
2025-02-04 20:02 ` [PATCH 08/27] iio: accel: adxl367: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 09/27] iio: adc: ad4000: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 10/27] iio: adc: ad4130: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 11/27] iio: adc: ad4695: " Jonathan Cameron
2025-02-05 23:28 ` David Lechner
2025-02-09 17:54 ` Jonathan Cameron
2025-02-04 20:02 ` [PATCH 12/27] iio: adc: ad7606: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 13/27] iio: adc: ad7625: " Jonathan Cameron
2025-02-05 19:04 ` Trevor Gamblin
2025-02-04 20:02 ` [PATCH 14/27] iio: adc: ad7779: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 15/27] iio: adc: ad9467: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 16/27] iio: adc: max1363: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 17/27] iio: adc: rtq6056: " Jonathan Cameron
2025-02-07 1:48 ` ChiYuan Huang
2025-02-04 20:02 ` [PATCH 18/27] iio: adc: ti-adc161s626: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 19/27] iio: adc: ti-ads1119: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 20/27] iio: addac: ad74413r: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 21/27] iio: chemical: ens160: " Jonathan Cameron
2025-02-07 22:23 ` Gustavo Silva
2025-02-04 20:02 ` [PATCH 22/27] iio: dac: ad3552r-hs: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 23/27] iio: dac: ad8460: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 24/27] iio: dummy: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 25/27] iio: imu: bmi323: " Jonathan Cameron
2025-02-04 20:02 ` [PATCH 26/27] iio: light: bh1745: " Jonathan Cameron
2025-02-07 23:48 ` Mudit Sharma
2025-02-04 20:02 ` [PATCH 27/27] iio: Drop iio_device_claim_direct_scoped() and related infrastructure Jonathan Cameron
2025-02-05 23:43 ` [PATCH 00/27] iio: improve handling of direct mode claim and release David Lechner
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=20250204200250.636721-2-jic23@kernel.org \
--to=jic23@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=Mariel.Tinaco@analog.com \
--cc=adureghello@baylibre.com \
--cc=apokusinski01@gmail.com \
--cc=cy_huang@richtek.com \
--cc=demonsingur@gmail.com \
--cc=dlechner@baylibre.com \
--cc=gstols@baylibre.com \
--cc=gustavograzs@gmail.com \
--cc=gwendal@chromium.org \
--cc=joao.goncalves@toradex.com \
--cc=jstephan@baylibre.com \
--cc=linux-iio@vger.kernel.org \
--cc=marcelo.schmitt@analog.com \
--cc=muditsharma.info@gmail.com \
--cc=nuno.sa@analog.com \
--cc=ramona.nechita@analog.com \
--cc=tgamblin@baylibre.com \
--cc=tomasz.duszynski@octakon.com \
/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