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 ] > > Hello Christophe > > Thanks for the review > You were right about typecheck - it was meant to check errors even if > CONFIG_DEBUG_MUTEXES was off. Yes that's current practice in order to catch problems as soon as possible. > > Here's new version based on the comments: > > diff --git a/include/linux/mutex.h b/include/linux/mutex.h > index 67edc4ca2bee..9193b163038f 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,34 @@ do > { \ > } while (0) > #endif /* CONFIG_PREEMPT_RT */ > > +#ifdef CONFIG_DEBUG_MUTEXES > + > +int debug_devm_mutex_init(struct device *dev, struct mutex *lock); > + > +static inline int __devm_mutex_init(struct device *dev, struct mutex > *lock) > +{ > + return debug_devm_mutex_init(dev, lock); > +} You don't need that inline function, just change debug_devm_mutex_init() to __devm_mutex_init(). > + > +#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 /* ... * ... */ > + 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..967a5367c79a 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 debug_devm_mutex_init(struct device *dev, struct mutex *lock) Rename __devm_mutex_init(); It makes it more clear that nobody is expected to call it directly. > +{ > + 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 > >