Linux LED subsystem development
 help / color / mirror / Atom feed
From: George Stark <gnstark@salutedevices.com>
To: Waiman Long <longman@redhat.com>,
	Hans de Goede <hdegoede@redhat.com>, <pavel@ucw.cz>,
	<lee@kernel.org>, <vadimp@nvidia.com>, <mpe@ellerman.id.au>,
	<npiggin@gmail.com>, <christophe.leroy@csgroup.eu>,
	<mazziesaccount@gmail.com>, <andy.shevchenko@gmail.com>,
	<jic23@kernel.org>, <peterz@infradead.org>,
	<boqun.feng@gmail.com>, <will@kernel.org>, <mingo@redhat.com>
Cc: <linux-leds@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linuxppc-dev@lists.ozlabs.org>, <kernel@salutedevices.com>
Subject: Re: [PATCH v2 01/10] devm-helpers: introduce devm_mutex_init
Date: Thu, 7 Dec 2023 03:37:59 +0300	[thread overview]
Message-ID: <75368bdb-b54e-4e15-a3c0-89b920e5e729@salutedevices.com> (raw)
In-Reply-To: <469f44fb-2371-4b3b-bc1c-d09ec35a5ec8@redhat.com>

Hello Waiman

Thanks for the review.

On 12/7/23 00:02, Waiman Long wrote:
> On 12/6/23 14:55, Hans de Goede wrote:
>> Hi,
>>
>> On 12/6/23 19:58, George Stark wrote:
>>> Hello Hans
>>>
>>> Thanks for the review.
>>>
>>> On 12/6/23 18:01, Hans de Goede wrote:
>>>> Hi George,
>>>>
...
>>>> mutex_destroy() only actually does anything if CONFIG_DEBUG_MUTEXES
>>>> is set, otherwise it is an empty inline-stub.
>>>>
>>>> Adding a devres resource to the device just to call an empty inline
>>>> stub which is a no-op seems like a waste of resources. IMHO it
>>>> would be better to change this to:
>>>>
>>>> static inline int devm_mutex_init(struct device *dev, struct mutex 
>>>> *lock)
>>>> {
>>>>      mutex_init(lock);
>>>> #ifdef CONFIG_DEBUG_MUTEXES
>>>>      return devm_add_action_or_reset(dev, devm_mutex_release, lock);
>>>> #else
>>>>      return 0;
>>>> #endif
>>>> }
>>>>
>>>> To avoid the unnecessary devres allocation when
>>>> CONFIG_DEBUG_MUTEXES is not set.
>>> Honestly saying I don't like unnecessary devres allocation either but 
>>> the proposed approach has its own price:
>>>
>>> 1) we'll have more than one place with branching if mutex_destroy is 
>>> empty or not using  indirect condition. If suddenly mutex_destroy is 
>>> extended for non-debug code (in upstream branch or e.g. by someone 
>>> for local debug) than there'll be a problem.
>>>
>>> 2) If mutex_destroy is empty or not depends on CONFIG_PREEMPT_RT 
>>> option too. When CONFIG_PREEMPT_RT is on mutex_destroy is always empty.
>>>
>>> As I see it only the mutex interface (mutex.h) has to say definitely 
>>> if mutex_destroy must be called. Probably we could add some define to 
>>> include/linux/mutex.h,like IS_MUTEX_DESTROY_REQUIRED and declare it 
>>> near mutex_destroy definition itself.
>> That (a  IS_MUTEX_DESTROY_REQUIRED define) is an interesting idea. 
>> Lets s>
>>>> Adding a devres resource to the device just to call an empty inline
>>>> stub which is a no-op seems like a waste of resources. IMHO it
>>>> would be better to change this to:
>>>>
>>>> static inline int devm_mutex_init(struct device *dev, struct mutex 
>>>> *lock)
>>>> {
>>>>      mutex_init(lock);
>>>> #ifdef CONFIG_DEBUG_MUTEXES
>>>>      return devm_add_action_or_reset(dev, devm_mutex_release, lock);
>>>> #else
>>>>      return 0;
>>>> #endif
>>>> }
>>>>ee for v3 if the mutex maintainers will accept that and if not 
>> then I guess we will just need to live with the unnecessary devres 
>> allocation.
> 
> The purpose of calling mutex_destroy() is to mark a mutex as being 
> destroyed so that any subsequent call to mutex_lock/unlock will cause a 
> warning to be printed when CONFIG_DEBUG_MUTEXES is defined. I would not 
> say that mutex_destroy() is required. Rather it is a nice to have for 
> catching programming error.

This is quite understandable but probably mutex_destroy() is not the 
best name for an optional API. Questions are asked over and over again
if it can be safely ignored taking into account that it could be 
extended in the future. Every maintainer makes decision on that question
in his own way and it leads to inconsistency.

devm_mutex_init could take responsibility for calling/dropping 
mutex_destroy() on its own.


> Cheers,
> Longman
> 

-- 
Best regards
George

  reply	other threads:[~2023-12-07  0:37 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-04 18:05 [PATCH v2 00/10] devm_led_classdev_register() usage problem George Stark
2023-12-04 18:05 ` [PATCH v2 01/10] devm-helpers: introduce devm_mutex_init George Stark
2023-12-04 18:11   ` Andy Shevchenko
2023-12-06  7:56     ` George Stark
2023-12-06 14:58       ` Hans de Goede
2023-12-04 23:05   ` Christophe Leroy
2023-12-05  6:20   ` Matti Vaittinen
2023-12-06 15:01   ` Hans de Goede
2023-12-06 18:58     ` George Stark
2023-12-06 19:55       ` Hans de Goede
2023-12-06 21:02         ` Waiman Long
2023-12-07  0:37           ` George Stark [this message]
2023-12-07  2:16             ` Waiman Long
2023-12-07 21:29           ` Waiman Long
2023-12-06 22:14       ` Christophe Leroy
2023-12-06 22:37         ` Christophe Leroy
2023-12-06 23:24           ` George Stark
2023-12-07 11:59             ` Andy Shevchenko
2023-12-07 12:31               ` Christophe Leroy
2023-12-07 12:45                 ` Andy Shevchenko
2023-12-07 12:02             ` Andy Shevchenko
2023-12-07 12:28               ` Christophe Leroy
2023-12-07 12:51                 ` George Stark
2023-12-07 13:01                   ` Christophe Leroy
2023-12-07 13:24                     ` George Stark
2023-12-04 18:05 ` [PATCH v2 02/10] leds: aw2013: unlock mutex before destroying it George Stark
2023-12-04 18:13   ` Andy Shevchenko
2023-12-04 23:09   ` Christophe Leroy
2023-12-06  8:37     ` George Stark
2023-12-04 18:05 ` [PATCH v2 03/10] leds: aw2013: use devm API to cleanup module's resources George Stark
2023-12-04 18:15   ` Andy Shevchenko
2023-12-04 23:14   ` Christophe Leroy
2023-12-04 18:05 ` [PATCH v2 04/10] leds: aw200xx: " George Stark
2023-12-04 18:16   ` Andy Shevchenko
2023-12-04 23:17   ` Christophe Leroy
2023-12-04 18:05 ` [PATCH v2 05/10] leds: lp3952: " George Stark

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=75368bdb-b54e-4e15-a3c0-89b920e5e729@salutedevices.com \
    --to=gnstark@salutedevices.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=christophe.leroy@csgroup.eu \
    --cc=hdegoede@redhat.com \
    --cc=jic23@kernel.org \
    --cc=kernel@salutedevices.com \
    --cc=lee@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=longman@redhat.com \
    --cc=mazziesaccount@gmail.com \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=npiggin@gmail.com \
    --cc=pavel@ucw.cz \
    --cc=peterz@infradead.org \
    --cc=vadimp@nvidia.com \
    --cc=will@kernel.org \
    /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