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,
That (a IS_MUTEX_DESTROY_REQUIRED define) is an interesting idea. Lets s>mutex_destroy() only actually does anything if CONFIG_DEBUG_MUTEXESHonestly saying I don't like unnecessary devres allocation either but the proposed approach has its own price:
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.
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.then I guess we will just need to live with the unnecessary devres allocation.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
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.
Cheers,
Longman