From: Waiman Long <longman@redhat.com>
To: George Stark <gnstark@salutedevices.com>,
andy.shevchenko@gmail.com, pavel@ucw.cz, lee@kernel.org,
vadimp@nvidia.com, mpe@ellerman.id.au, npiggin@gmail.com,
christophe.leroy@csgroup.eu, hdegoede@redhat.com,
mazziesaccount@gmail.com, peterz@infradead.org, mingo@redhat.com,
will@kernel.org, boqun.feng@gmail.com, nikitos.tr@gmail.com,
marek.behun@nic.cz, kabel@kernel.org
Cc: linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, kernel@salutedevices.com
Subject: Re: [PATCH v6 1/9] locking/mutex: introduce devm_mutex_init
Date: Thu, 14 Mar 2024 09:32:48 -0400 [thread overview]
Message-ID: <9fe2eaef-0407-4a96-b603-e7f6579110b6@redhat.com> (raw)
In-Reply-To: <20240314084531.1935545-2-gnstark@salutedevices.com>
On 3/14/24 04:45, George Stark wrote:
> Using of devm API leads to a certain order of releasing resources.
> So all dependent resources which are not devm-wrapped should be deleted
> with respect to devm-release order. Mutex is one of such objects that
> often is bound to other resources and has no own devm wrapping.
> Since mutex_destroy() actually does nothing in non-debug builds
> frequently calling mutex_destroy() is just ignored which is safe for now
> but wrong formally and can lead to a problem if mutex_destroy() will be
> extended so introduce devm_mutex_init()
>
> Signed-off-by: George Stark <gnstark@salutedevices.com>
> Suggested by-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> ---
> include/linux/mutex.h | 27 +++++++++++++++++++++++++++
> kernel/locking/mutex-debug.c | 11 +++++++++++
> 2 files changed, 38 insertions(+)
>
> diff --git a/include/linux/mutex.h b/include/linux/mutex.h
> index 67edc4ca2bee..f57e005ded24 100644
> --- a/include/linux/mutex.h
> +++ b/include/linux/mutex.h
> @@ -22,6 +22,8 @@
> #include <linux/cleanup.h>
> #include <linux/mutex_types.h>
>
> +struct device;
> +
> #ifdef CONFIG_DEBUG_LOCK_ALLOC
> # define __DEP_MAP_MUTEX_INITIALIZER(lockname) \
> , .dep_map = { \
> @@ -117,6 +119,31 @@ do { \
> } while (0)
> #endif /* CONFIG_PREEMPT_RT */
>
> +#ifdef CONFIG_DEBUG_MUTEXES
> +
> +int __devm_mutex_init(struct device *dev, struct mutex *lock);
> +
> +#else
> +
> +static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
> +{
> + /*
> + * When CONFIG_DEBUG_MUTEXES is off mutex_destroy is just a nop so
> + * no really need to register it in devm subsystem.
> + */
> + return 0;
> +}
> +
> +#endif
> +
> +#define devm_mutex_init(dev, mutex) \
> +({ \
> + typeof(mutex) mutex_ = (mutex); \
> + \
> + mutex_init(mutex_); \
> + __devm_mutex_init(dev, mutex_); \
> +})
> +
> /*
> * See kernel/locking/mutex.c for detailed documentation of these APIs.
> * Also see Documentation/locking/mutex-design.rst.
> diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c
> index bc8abb8549d2..6aa77e3dc82e 100644
> --- a/kernel/locking/mutex-debug.c
> +++ b/kernel/locking/mutex-debug.c
> @@ -19,6 +19,7 @@
> #include <linux/kallsyms.h>
> #include <linux/interrupt.h>
> #include <linux/debug_locks.h>
> +#include <linux/device.h>
>
> #include "mutex.h"
>
> @@ -89,6 +90,16 @@ void debug_mutex_init(struct mutex *lock, const char *name,
> lock->magic = lock;
> }
>
> +static void devm_mutex_release(void *res)
> +{
> + mutex_destroy(res);
> +}
> +
> +int __devm_mutex_init(struct device *dev, struct mutex *lock)
> +{
> + return devm_add_action_or_reset(dev, devm_mutex_release, lock);
> +}
> +
> /***
> * mutex_destroy - mark a mutex unusable
> * @lock: the mutex to be destroyed
Acked-by: Waiman Long <longman@redhat.com>
WARNING: multiple messages have this Message-ID (diff)
From: Waiman Long <longman@redhat.com>
To: George Stark <gnstark@salutedevices.com>,
andy.shevchenko@gmail.com, pavel@ucw.cz, lee@kernel.org,
vadimp@nvidia.com, mpe@ellerman.id.au, npiggin@gmail.com,
christophe.leroy@csgroup.eu, hdegoede@redhat.com,
mazziesaccount@gmail.com, peterz@infradead.org, mingo@redhat.com,
will@kernel.org, boqun.feng@gmail.com, nikitos.tr@gmail.com,
marek.behun@nic.cz, kabel@kernel.org
Cc: kernel@salutedevices.com, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org
Subject: Re: [PATCH v6 1/9] locking/mutex: introduce devm_mutex_init
Date: Thu, 14 Mar 2024 09:32:48 -0400 [thread overview]
Message-ID: <9fe2eaef-0407-4a96-b603-e7f6579110b6@redhat.com> (raw)
In-Reply-To: <20240314084531.1935545-2-gnstark@salutedevices.com>
On 3/14/24 04:45, George Stark wrote:
> Using of devm API leads to a certain order of releasing resources.
> So all dependent resources which are not devm-wrapped should be deleted
> with respect to devm-release order. Mutex is one of such objects that
> often is bound to other resources and has no own devm wrapping.
> Since mutex_destroy() actually does nothing in non-debug builds
> frequently calling mutex_destroy() is just ignored which is safe for now
> but wrong formally and can lead to a problem if mutex_destroy() will be
> extended so introduce devm_mutex_init()
>
> Signed-off-by: George Stark <gnstark@salutedevices.com>
> Suggested by-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> ---
> include/linux/mutex.h | 27 +++++++++++++++++++++++++++
> kernel/locking/mutex-debug.c | 11 +++++++++++
> 2 files changed, 38 insertions(+)
>
> diff --git a/include/linux/mutex.h b/include/linux/mutex.h
> index 67edc4ca2bee..f57e005ded24 100644
> --- a/include/linux/mutex.h
> +++ b/include/linux/mutex.h
> @@ -22,6 +22,8 @@
> #include <linux/cleanup.h>
> #include <linux/mutex_types.h>
>
> +struct device;
> +
> #ifdef CONFIG_DEBUG_LOCK_ALLOC
> # define __DEP_MAP_MUTEX_INITIALIZER(lockname) \
> , .dep_map = { \
> @@ -117,6 +119,31 @@ do { \
> } while (0)
> #endif /* CONFIG_PREEMPT_RT */
>
> +#ifdef CONFIG_DEBUG_MUTEXES
> +
> +int __devm_mutex_init(struct device *dev, struct mutex *lock);
> +
> +#else
> +
> +static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
> +{
> + /*
> + * When CONFIG_DEBUG_MUTEXES is off mutex_destroy is just a nop so
> + * no really need to register it in devm subsystem.
> + */
> + return 0;
> +}
> +
> +#endif
> +
> +#define devm_mutex_init(dev, mutex) \
> +({ \
> + typeof(mutex) mutex_ = (mutex); \
> + \
> + mutex_init(mutex_); \
> + __devm_mutex_init(dev, mutex_); \
> +})
> +
> /*
> * See kernel/locking/mutex.c for detailed documentation of these APIs.
> * Also see Documentation/locking/mutex-design.rst.
> diff --git a/kernel/locking/mutex-debug.c b/kernel/locking/mutex-debug.c
> index bc8abb8549d2..6aa77e3dc82e 100644
> --- a/kernel/locking/mutex-debug.c
> +++ b/kernel/locking/mutex-debug.c
> @@ -19,6 +19,7 @@
> #include <linux/kallsyms.h>
> #include <linux/interrupt.h>
> #include <linux/debug_locks.h>
> +#include <linux/device.h>
>
> #include "mutex.h"
>
> @@ -89,6 +90,16 @@ void debug_mutex_init(struct mutex *lock, const char *name,
> lock->magic = lock;
> }
>
> +static void devm_mutex_release(void *res)
> +{
> + mutex_destroy(res);
> +}
> +
> +int __devm_mutex_init(struct device *dev, struct mutex *lock)
> +{
> + return devm_add_action_or_reset(dev, devm_mutex_release, lock);
> +}
> +
> /***
> * mutex_destroy - mark a mutex unusable
> * @lock: the mutex to be destroyed
Acked-by: Waiman Long <longman@redhat.com>
next prev parent reply other threads:[~2024-03-14 13:32 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-14 8:45 [PATCH v6 0/9] devm_led_classdev_register() usage problem George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 1/9] locking/mutex: introduce devm_mutex_init George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 9:02 ` Christophe Leroy
2024-03-14 9:02 ` Christophe Leroy
2024-03-14 10:33 ` Andy Shevchenko
2024-03-14 10:33 ` Andy Shevchenko
2024-03-14 10:40 ` Marek Behún
2024-03-14 10:40 ` Marek Behún
2024-03-14 13:32 ` Waiman Long [this message]
2024-03-14 13:32 ` Waiman Long
2024-03-14 8:45 ` [PATCH v6 2/9] leds: aw2013: use devm API to cleanup module's resources George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 3/9] leds: aw200xx: " George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 4/9] leds: lp3952: " George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 5/9] leds: lm3532: " George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 6/9] leds: nic78bx: " George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 7/9] leds: mlxreg: use devm_mutex_init for mutex initializtion George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 8/9] leds: an30259a: use devm_mutext_init for mutext initialization George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 8:45 ` [PATCH v6 9/9] leds: powernv: use LED_RETAIN_AT_SHUTDOWN flag for leds George Stark
2024-03-14 8:45 ` George Stark
2024-03-14 10:34 ` Andy Shevchenko
2024-03-14 10:34 ` Andy Shevchenko
2024-03-14 10:37 ` [PATCH v6 0/9] devm_led_classdev_register() usage problem Andy Shevchenko
2024-03-14 10:37 ` Andy Shevchenko
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=9fe2eaef-0407-4a96-b603-e7f6579110b6@redhat.com \
--to=longman@redhat.com \
--cc=andy.shevchenko@gmail.com \
--cc=boqun.feng@gmail.com \
--cc=christophe.leroy@csgroup.eu \
--cc=gnstark@salutedevices.com \
--cc=hdegoede@redhat.com \
--cc=kabel@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=marek.behun@nic.cz \
--cc=mazziesaccount@gmail.com \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=nikitos.tr@gmail.com \
--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 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.