Le 12/03/2024 à 16:30, George Stark a écrit : > [Vous ne recevez pas souvent de courriers de gnstark@xxxxxxxxxxxxxxxxx. > Découvrez pourquoi ceci est important à > https://aka.ms/LearnAboutSenderIdentification ] > > Hello Christophe > > On 3/12/24 14:51, Christophe Leroy wrote: >> >> >> Le 12/03/2024 à 12:39, George Stark a écrit : >>> [Vous ne recevez pas souvent de courriers de gnstark@xxxxxxxxxxxxxxxxx. >>> Découvrez pourquoi ceci est important à >>> https://aka.ms/LearnAboutSenderIdentification ] > > ... > >> You don't need that inline function, just change debug_devm_mutex_init() >> to __devm_mutex_init(). > > I stuck to debug_* name because mutex-debug.c already exports a set > of debug_ calls so... Ah yes you are right I didn't see that. On the other hand all those debug_mutex_* are used by kernel/locking/mutex.c. Here we really don't want our new function to be called by anything else than devm_mutex_init so by calling it __devm_mutex_init() you kind of tie them together. > Well it's not essential anyway. Here's the next try: Looks good to me. > > diff --git a/include/linux/mutex.h b/include/linux/mutex.h > index 67edc4ca2bee..537b5ea18ceb 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,29 @@ 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) \ > +({ \ > + 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 > -- > 2.25.1 > > > >>> + >>> +#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. >>> + */ >> >> Don't know if it is because tabs are replaced by blanks in you email, >> but the stars should be aligned > > Ack > > > -- > Best regards > George