Linux IIO development
 help / color / mirror / Atom feed
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 v2 00/27] iio: improve handling of direct mode claim and release
Date: Sun,  9 Feb 2025 18:05:57 +0000	[thread overview]
Message-ID: <20250209180624.701140-1-jic23@kernel.org> (raw)

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

v2: Changes listed in individual patches.  A few typos + missing or
    missordered headers (thanks David!)

I could have just applied this with tweaks, but given the large number
of drivers touched I'd like it to be on list a little longer for
others to see it. Might as well make that the updated version.

This is the first of perhaps 4 related series, broken up mostly to keep
them bite sized enough for people to review.

Difference from RFC.
- Some refactoring etc
- Patch to drop the _scoped infrastructure.

Effectively two linked things in this series:

1) Ripping out iio_device_claim_direct_scoped()
2) Enabling use of sparse to check the claim is always released.

The iio_device_claim_direct_scoped() was an interesting experiment built
on conditional scoped guards, but it has been the source of a range of
esoteric build warnings and is awkward to use.

Several attempts have been made to improve the related handling but in the
end it looks like this is just too hard to use and too prone to tripping up
the compiler.  So time to rip it out.

Most recent discussion was around if_not_cond_guard()
https://lore.kernel.org/all/CAHk-=wi8C2yZF_y_T180-v+dSZAhps5QghS_2tKfn-+xAghYPQ@mail.gmail.com/
which looked like a promising avenue but ran into problems and
got reverted.

A large part of the advantage of scoped cleanup is that it removes the
possibility of failing to call the 'destructor' which here released the
claim on direct mode (implementation detail is that corresponds to
unlocking a mutex).  It's a shame to lose that but we do have other
infrastructure to prevent such common mistakes, lock markings + sparse.
Hence I thought we could simply enable those for existing
iio_device_claim_direct_mode() / iio_device_release_direct_mode() via
similar magic to that used for __cond_lock() that is rename existing
iio_device_claim_direct_mode to do_iio_device_claim_direct_mode and

#define iio_device_claim_direct_mode(iio_dev) \
	do_iio_device_claim_direct_mode(iio_dev) ? : ({ __acquire(iio_dev); 0; })

Unfortunatley that gives a few false positives. Seems sparse is tripping
up on this magic in some more complex switch statements.
Instead this series makes the iio specific infrastructure look more like
a normal conditional lock.  Given that a failure to claim direect mode only
ever resulted in -EBUSY, we can make it a boolean return instead.
Note the sense is switched so true now means successfully claimed the mode.

Ideally we'd use the sparse markings __cond_acquires() and __releases()
but appropriate support has not yet landed in upstream sparse. It
can be found in this thread.
https://lore.kernel.org/all/CAHk-=wjZfO9hGqJ2_hGQG3U_XzSh9_XaXze=HgPdvJbgrvASfA@mail.gmail.com/

As David pointed out on the RFC the reason this series worked at all
was because we had __acquire() in the static inline wrapper. Given that
works, it will do for now. Added some docs to stop us accidentally hiding
that wrapper in a .c file and breaking everything.

These new wrappers are called iio_device_claim_direct() and
iio_device_claim_release().  Naming is based on no one seeming bothered
that we dropped mode from the scoped case. Long term plan would be to
drop the _direct_mode() calls at the end of all these series.
That will cause some rebase complexity for drivers that race with this.
I'll handle those whilst merging.

In this first set we have a false positive that showed up with one of my
earlier attempts + dropping of all uses and the infrastructure for
iio_device_claim_direct_scoped().

I've tried to +CC people on individual patches, but in some cases there
is no active maintainer.  Hence if you are looking at all, please take
a look at a few of them!

Jonathan


Jonathan Cameron (27):
  iio: core: Rework claim and release of direct mode to work with
    sparse.
  iio: chemical: scd30: Use guard(mutex) to allow early returns
  iio: chemical: scd30: Switch to sparse friendly claim/release_direct()
  iio: temperature: tmp006: Stop using iio_device_claim_direct_scoped()
  iio: proximity: sx9310: Stop using iio_device_claim_direct_scoped()
  iio: proximity: sx9324: Stop using iio_device_claim_direct_scoped()
  iio: proximity: sx9360: Stop using iio_device_claim_direct_scoped()
  iio: accel: adxl367: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad4000: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad4130: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad4695: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad7606: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad7625: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad7779: Stop using iio_device_claim_direct_scoped()
  iio: adc: ad9467: Stop using iio_device_claim_direct_scoped()
  iio: adc: max1363: Stop using iio_device_claim_direct_scoped()
  iio: adc: rtq6056: Stop using iio_device_claim_direct_scoped()
  iio: adc: ti-adc161s626: Stop using iio_device_claim_direct_scoped()
  iio: adc: ti-ads1119: Stop using iio_device_claim_direct_scoped()
  iio: addac: ad74413r: Stop using iio_device_claim_direct_scoped()
  iio: chemical: ens160: Stop using iio_device_claim_direct_scoped()
  iio: dac: ad3552r-hs: Stop using iio_device_claim_direct_scoped()
  iio: dac: ad8460: Stop using iio_device_claim_direct_scoped()
  iio: dummy: Stop using iio_device_claim_direct_scoped()
  iio: imu: bmi323: Stop using iio_device_claim_direct_scoped()
  iio: light: bh1745: Stop using iio_device_claim_direct_scoped()
  iio: Drop iio_device_claim_direct_scoped() and related infrastructure

 drivers/iio/accel/adxl367.c          | 194 ++++++++++++----------
 drivers/iio/adc/ad4000.c             |  60 ++++---
 drivers/iio/adc/ad4130.c             |  18 +-
 drivers/iio/adc/ad4695.c             | 240 +++++++++++++++------------
 drivers/iio/adc/ad7606.c             |  14 +-
 drivers/iio/adc/ad7625.c             |   9 +-
 drivers/iio/adc/ad7779.c             | 101 ++++++-----
 drivers/iio/adc/ad9467.c             |  23 ++-
 drivers/iio/adc/max1363.c            | 165 +++++++++---------
 drivers/iio/adc/rtq6056.c            |  46 +++--
 drivers/iio/adc/ti-adc161s626.c      |  14 +-
 drivers/iio/adc/ti-ads1119.c         |  17 +-
 drivers/iio/addac/ad74413r.c         |  14 +-
 drivers/iio/chemical/ens160_core.c   |  32 ++--
 drivers/iio/chemical/scd30_core.c    |  70 ++++----
 drivers/iio/dac/ad3552r-hs.c         |  15 +-
 drivers/iio/dac/ad8460.c             |  18 +-
 drivers/iio/dummy/iio_simple_dummy.c | 119 +++++++------
 drivers/iio/imu/bmi323/bmi323_core.c |  44 ++---
 drivers/iio/light/bh1745.c           |  18 +-
 drivers/iio/proximity/sx9310.c       |  19 ++-
 drivers/iio/proximity/sx9324.c       |  19 ++-
 drivers/iio/proximity/sx9360.c       |  19 ++-
 drivers/iio/temperature/tmp006.c     |  33 ++--
 include/linux/iio/iio.h              |  41 +++--
 25 files changed, 777 insertions(+), 585 deletions(-)

-- 
2.48.1


             reply	other threads:[~2025-02-09 18:06 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-09 18:05 Jonathan Cameron [this message]
2025-02-09 18:05 ` [PATCH v2 01/27] iio: core: Rework claim and release of direct mode to work with sparse Jonathan Cameron
2025-02-17 10:38   ` Nuno Sá
2025-02-17 12:57     ` Jonathan Cameron
2025-02-22 15:51   ` Andy Shevchenko
2025-02-22 17:23     ` Jonathan Cameron
2025-02-22 20:58       ` Andy Shevchenko
2025-02-25  6:25         ` Jonathan Cameron
2025-02-25  7:09           ` Andy Shevchenko
2025-02-09 18:05 ` [PATCH v2 02/27] iio: chemical: scd30: Use guard(mutex) to allow early returns Jonathan Cameron
2025-02-17 10:56   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 03/27] iio: chemical: scd30: Switch to sparse friendly claim/release_direct() Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 04/27] iio: temperature: tmp006: Stop using iio_device_claim_direct_scoped() Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 05/27] iio: proximity: sx9310: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 06/27] iio: proximity: sx9324: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 07/27] iio: proximity: sx9360: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 08/27] iio: accel: adxl367: " Jonathan Cameron
2025-02-17 10:44   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 09/27] iio: adc: ad4000: " Jonathan Cameron
2025-02-17 10:45   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 10/27] iio: adc: ad4130: " Jonathan Cameron
2025-02-17 10:45   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 11/27] iio: adc: ad4695: " Jonathan Cameron
2025-02-16 18:19   ` Jonathan Cameron
2025-02-16 19:00     ` David Lechner
2025-02-17 10:48       ` Nuno Sá
2025-02-17 13:04         ` Jonathan Cameron
2025-02-17 10:48   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 12/27] iio: adc: ad7606: " Jonathan Cameron
2025-02-17 10:49   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 13/27] iio: adc: ad7625: " Jonathan Cameron
2025-02-17 10:49   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 14/27] iio: adc: ad7779: " Jonathan Cameron
2025-02-17 10:50   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 15/27] iio: adc: ad9467: " Jonathan Cameron
2025-02-17 10:50   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 16/27] iio: adc: max1363: " Jonathan Cameron
2025-02-17 10:51   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 17/27] iio: adc: rtq6056: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 18/27] iio: adc: ti-adc161s626: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 19/27] iio: adc: ti-ads1119: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 20/27] iio: addac: ad74413r: " Jonathan Cameron
2025-02-17 10:52   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 21/27] iio: chemical: ens160: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 22/27] iio: dac: ad3552r-hs: " Jonathan Cameron
2025-02-17 10:53   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 23/27] iio: dac: ad8460: " Jonathan Cameron
2025-02-17 10:52   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 24/27] iio: dummy: " Jonathan Cameron
2025-02-17 10:55   ` Nuno Sá
2025-02-09 18:06 ` [PATCH v2 25/27] iio: imu: bmi323: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 26/27] iio: light: bh1745: " Jonathan Cameron
2025-02-09 18:06 ` [PATCH v2 27/27] iio: Drop iio_device_claim_direct_scoped() and related infrastructure Jonathan Cameron
2025-02-17 10:57   ` Nuno Sá

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=20250209180624.701140-1-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