All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kurt Borja" <kuurtb@gmail.com>
To: "David Lechner" <dlechner@baylibre.com>,
	"Kurt Borja" <kuurtb@gmail.com>,
	"Andy Shevchenko" <andriy.shevchenko@intel.com>,
	"Lars-Peter Clausen" <lars@metafoo.de>,
	"Michael Hennerich" <Michael.Hennerich@analog.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Benson Leung" <bleung@chromium.org>,
	"Antoniu Miclaus" <antoniu.miclaus@analog.com>,
	"Gwendal Grignou" <gwendal@chromium.org>,
	"Shrikant Raskar" <raskar.shree97@gmail.com>,
	"Per-Daniel Olsson" <perdaniel.olsson@axis.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	"Guenter Roeck" <groeck@chromium.org>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
	chrome-platform@lists.linux.dev
Subject: Re: [PATCH RFC 3/6] iio: core: Add cleanup.h support for iio_device_claim_*()
Date: Thu, 04 Dec 2025 12:18:31 -0500	[thread overview]
Message-ID: <DEPLQT84HBAO.2GAY5BHP05HNL@gmail.com> (raw)
In-Reply-To: <bf1c82f7-da25-47b6-846d-9f8427ee5790@baylibre.com>

On Wed Dec 3, 2025 at 5:34 PM -05, David Lechner wrote:
> On 12/3/25 3:50 PM, David Lechner wrote:
>> On 12/3/25 1:18 PM, Kurt Borja wrote:
>>> Add guard() and ACQUIRE() support for iio_device_claim_*() lock.
>>>
>>> This involves exporting iio_device_{claim, release}() wrappers to define
>>> a general GUARD class, and then defining the _direct and _buffer
>>> conditional ones.
>> 
>> Commit messages should say why we need this.
>> 
>> Also, this seems like two separate things. Adding a new claim/release pair
>> and adding the conditional guard support to the existing ones. So perhaps
>> better as two separate patches.
>> 
>>>
>>> Suggested-by: Andy Shevchenko <andriy.shevchenko@intel.com>
>>> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
>>> ---
>>>  drivers/iio/industrialio-core.c | 12 ++++++++++++
>>>  include/linux/iio/iio.h         | 20 ++++++++++++++++++++
>>>  2 files changed, 32 insertions(+)
>>>
>>> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
>>> index adf0142d0300..da090c993fe8 100644
>>> --- a/drivers/iio/industrialio-core.c
>>> +++ b/drivers/iio/industrialio-core.c
>>> @@ -2171,6 +2171,18 @@ int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev,
>>>  }
>>>  EXPORT_SYMBOL_GPL(__devm_iio_device_register);
>>>  
>>> +void __iio_device_claim(struct iio_dev *indio_dev)
>>> +{
>>> +	mutex_lock(&to_iio_dev_opaque(indio_dev)->mlock);
>>> +}
>>> +EXPORT_SYMBOL_GPL(__iio_device_claim);
>>> +
>>> +void __iio_device_release(struct iio_dev *indio_dev)
>>> +{
>>> +	mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock);
>>> +}
>>> +EXPORT_SYMBOL_GPL(__iio_device_release);
>>> +
>>>  /**
>>>   * __iio_device_claim_direct - Keep device in direct mode
>>>   * @indio_dev:	the iio_dev associated with the device
>>> diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
>>> index 27da9af67c47..472b13ec28d3 100644
>>> --- a/include/linux/iio/iio.h
>>> +++ b/include/linux/iio/iio.h
>>> @@ -10,6 +10,7 @@
>>>  #include <linux/align.h>
>>>  #include <linux/device.h>
>>>  #include <linux/cdev.h>
>>> +#include <linux/cleanup.h>
>>>  #include <linux/compiler_types.h>
>>>  #include <linux/minmax.h>
>>>  #include <linux/slab.h>
>>> @@ -661,9 +662,23 @@ void iio_device_unregister(struct iio_dev *indio_dev);
>>>  int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev,
>>>  			       struct module *this_mod);
>>>  int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp);
>>> +void __iio_device_claim(struct iio_dev *indio_dev);
>>> +void __iio_device_release(struct iio_dev *indio_dev);
>>>  bool __iio_device_claim_direct(struct iio_dev *indio_dev);
>>>  void __iio_device_release_direct(struct iio_dev *indio_dev);
>>>  
>>> +static inline void iio_device_claim(struct iio_dev *indio_dev)
>>> +	__acquires(indio_dev)
>>> +{
>>> +	__iio_device_claim(indio_dev);
>>> +}
>>> +
>>> +static inline void iio_device_release(struct iio_dev *indio_dev)
>>> +	__releases(indio_dev)
>>> +{
>>> +	__iio_device_release(indio_dev);
>>> +}
>> 
>> It was unfortunate that we had to drop "mode" from iio_device_claim_direct_mode()
>> during the recent API change, but at least it is fairly obvious that "direct"
>> is a mode. Here, dropping "mode" from the name hurts the understanding. These
>> could also use some documentation comments to explain what these are for and
>> when it is appropriate to use them. I had to really dig around the code to
>> come to the understanding that these mean "don't allow switching modes until
>> we release the claim".

I agree.

>> 
>> I would call it something like iio_device_{claim,release}_current_mode().
>> 
>> 
>>> +
>>>  /*
>>>   * Helper functions that allow claim and release of direct mode
>>>   * in a fashion that doesn't generate many false positives from sparse.
>>> @@ -690,6 +705,11 @@ static inline void iio_device_release_direct(struct iio_dev *indio_dev)
>>>  bool iio_device_claim_buffer(struct iio_dev *indio_dev);
>>>  void iio_device_release_buffer(struct iio_dev *indio_dev);
>>>  
>>> +DEFINE_GUARD(iio_device_claim, struct iio_dev *, iio_device_claim(_T),
>>> +	     iio_device_release(_T));
>>> +DEFINE_GUARD_COND(iio_device_claim, _buffer, iio_device_claim_buffer(_T));
>>> +DEFINE_GUARD_COND(iio_device_claim, _direct, iio_device_claim_direct(_T));
>>> +
>
> When I made the comments about keeping "mode" in the name, I forgot
> that DEFINE_GUARD_COND() only extends a DEFINE_GUARD(). So I understand
> if we need to make names that fit a certain pattern rather than what
> I suggested.
>
> Still would be nice to have:
>
> iio_device_claim_mode()
> iio_device_claim_mode_direct()
> iio_device_claim_mode_buffer()
> iio_device_release_mode()
>
> Just really annoying to rename iio_device_{claim,release}_direct()
> everywhere since we just did that. We could keep both names around
> for a while though to avoid the churn.

If we rename iio_device_claim_direct() (which is huge), maybe we can
pick shorter names and more descriptive names while at it? I was
thinking something like:

	iio_mode_lock()
	iio_mode_lock_direct()
	iio_mode_lock_buffer()
	iio_mode_unlock()

Shorter names will also keep lines short when using guards.

>
> It also means that we should remove __iio_device_release_direct() and
> iio_device_release_buffer_mode() to make it clear that there is only
> a single "release" function used by all variants of "claim".

I agree.

-- 
 ~ Kurt


  reply	other threads:[~2025-12-04 17:18 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-03 19:18 [PATCH RFC 0/6] iio: core: Introduce cleanup.h support for mode locks Kurt Borja
2025-12-03 19:18 ` [PATCH RFC 1/6] iio: core: Match iio_device_claim_*() return semantics Kurt Borja
2025-12-04 14:23   ` Nuno Sá
2025-12-04 15:05     ` Andy Shevchenko
2025-12-06 18:07       ` Jonathan Cameron
2025-12-04 17:27     ` Kurt Borja
2025-12-06 18:05     ` Jonathan Cameron
2025-12-07 15:59       ` Kurt Borja
2025-12-03 19:18 ` [PATCH RFC 2/6] iio: core: Match iio_device_claim_*() naming Kurt Borja
2025-12-03 21:50   ` David Lechner
2025-12-04 17:35     ` Kurt Borja
2025-12-06 18:11       ` Jonathan Cameron
2025-12-03 19:18 ` [PATCH RFC 3/6] iio: core: Add cleanup.h support for iio_device_claim_*() Kurt Borja
2025-12-03 21:50   ` David Lechner
2025-12-03 22:34     ` David Lechner
2025-12-04 17:18       ` Kurt Borja [this message]
2025-12-04 17:36         ` Andy Shevchenko
2025-12-06 18:43           ` Jonathan Cameron
2025-12-06 20:40             ` Andy Shevchenko
2025-12-07 16:00             ` Kurt Borja
2025-12-06 18:20   ` Jonathan Cameron
2025-12-07 15:59     ` Kurt Borja
2025-12-03 19:18 ` [PATCH RFC 4/6] iio: light: vcnl4000: Use cleanup.h for IIO locks Kurt Borja
2025-12-03 22:19   ` David Lechner
2025-12-03 19:18 ` [PATCH RFC 5/6] iio: health: max30102: " Kurt Borja
2025-12-03 21:52   ` David Lechner
2025-12-04 17:07     ` Kurt Borja
2025-12-04 17:35       ` David Lechner
2025-12-04 17:47         ` Kurt Borja
2025-12-06 18:17           ` Jonathan Cameron
2025-12-07 15:59             ` Kurt Borja
2025-12-03 19:18 ` [PATCH RFC 6/6] iio: light: opt4060: " Kurt Borja
2025-12-03 22:40   ` David Lechner
2025-12-04 17:23     ` Kurt Borja
2025-12-04 14:42   ` Nuno Sá
2025-12-04 17:31     ` Kurt Borja
2025-12-04 14:36 ` [PATCH RFC 0/6] iio: core: Introduce cleanup.h support for mode locks Nuno Sá
2025-12-04 15:07   ` Andy Shevchenko
2025-12-06 18:46     ` Jonathan Cameron
2025-12-07 16:00       ` Kurt Borja
2025-12-09 10:34       ` Nuno Sá
2025-12-09 17:05         ` David Lechner
2025-12-10  9:17           ` Nuno Sá
2025-12-10 18:04             ` Jonathan Cameron
2025-12-04 17:33   ` Kurt Borja

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=DEPLQT84HBAO.2GAY5BHP05HNL@gmail.com \
    --to=kuurtb@gmail.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=andriy.shevchenko@intel.com \
    --cc=andy@kernel.org \
    --cc=antoniu.miclaus@analog.com \
    --cc=bleung@chromium.org \
    --cc=chrome-platform@lists.linux.dev \
    --cc=dlechner@baylibre.com \
    --cc=groeck@chromium.org \
    --cc=gwendal@chromium.org \
    --cc=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nuno.sa@analog.com \
    --cc=perdaniel.olsson@axis.com \
    --cc=raskar.shree97@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.