All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: "Thomas Weißschuh" <linux@weissschuh.net>
Cc: Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>,
	Waiman Long <longman@redhat.com>,
	Boqun Feng <boqun.feng@gmail.com>, Pavel Machek <pavel@ucw.cz>,
	Lee Jones <lee@kernel.org>,
	Vicentiu Galanopulo <vicentiu.galanopulo@remote-tech.co.uk>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org
Subject: Re: [PATCH v2 2/2] locking/mutex: Mark devm_mutex_init() as __must_check
Date: Tue, 4 Feb 2025 10:01:06 +0100	[thread overview]
Message-ID: <20250204090106.GP7145@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20250204-must_check-devm_mutex_init-v2-2-7b6271c4b7e6@weissschuh.net>

On Tue, Feb 04, 2025 at 07:52:51AM +0100, Thomas Weißschuh wrote:
> Even if it's not critical, the avoidance of checking the error code
> from devm_mutex_init() call today diminishes the point of using devm
> variant of it. Tomorrow it may even leak something. Enforce all callers
> checking the return value through the compiler.
> 
> As devm_mutex_init() itself is a macro which can not be annotated,
> annotate __devm_mutex_init() instead.
> Unfortunately __must_check/warn_unused_result don't propagate through
> statement expression. To work around this move the statement expression
> into the argument list of the call to __devm_mutex_init() so
> devm_mutex_init() directly expands to __devm_mutex_init().
> 
> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> ---
>  include/linux/mutex.h | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)
> 
> diff --git a/include/linux/mutex.h b/include/linux/mutex.h
> index 2bf91b57591b49e4668752e773419ae945f124da..65b28c9e6efc123982d923d1ed171eae471c82c1 100644
> --- a/include/linux/mutex.h
> +++ b/include/linux/mutex.h
> @@ -126,11 +126,11 @@ do {							\
>  
>  #ifdef CONFIG_DEBUG_MUTEXES
>  
> -int __devm_mutex_init(struct device *dev, struct mutex *lock);
> +int __must_check __devm_mutex_init(struct device *dev, struct mutex *lock);
>  
>  #else
>  
> -static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
> +static inline int __must_check __devm_mutex_init(struct device *dev, struct mutex *lock)
>  {
>  	/*
>  	 * When CONFIG_DEBUG_MUTEXES is off mutex_destroy() is just a nop so
> @@ -141,13 +141,12 @@ static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
>  
>  #endif
>  
> -#define devm_mutex_init(dev, mutex)			\
> -({							\
> -	typeof(mutex) mutex_ = (mutex);			\
> -							\
> -	mutex_init(mutex_);				\
> -	__devm_mutex_init(dev, mutex_);			\
> -})
> +#define devm_mutex_init(dev, mutex) __devm_mutex_init(dev, ({	\
> +	typeof(mutex) mutex_ = (mutex);				\
> +								\
> +	mutex_init(mutex_);					\
> +	mutex_;							\
> +}))

Urgh, that's a bit ugly isn't it.

Now we can either write a helper for that like:

#define mutex_init_ret(mutex)                           \
({                                                      \
	typeof(mutex) mutex_ = (mutex);                 \
	mutex_init(mutex_);                             \
	mutex_;                                         \
})

#define devm_mutex_init(dev, mutex)                     \
        __devm_mutex_init(dev, mutex_init_ret(mutex))


Or we can try and make mutex_init() return the pointer itself. I don't
think that will break anything, but its best to feel that to the robots
to make sure.

      reply	other threads:[~2025-02-04  9:01 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-04  6:52 [PATCH v2 0/2] locking/mutex: Mark devm_mutex_init() as __must_check Thomas Weißschuh
2025-02-04  6:52 ` [PATCH v2 1/2] leds: st1202: Check for error code from devm_mutex_init() call Thomas Weißschuh
2025-02-11 13:41   ` (subset) " Lee Jones
2025-02-04  6:52 ` [PATCH v2 2/2] locking/mutex: Mark devm_mutex_init() as __must_check Thomas Weißschuh
2025-02-04  9:01   ` Peter Zijlstra [this message]

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=20250204090106.GP7145@noisy.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=boqun.feng@gmail.com \
    --cc=lee@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linux@weissschuh.net \
    --cc=longman@redhat.com \
    --cc=mingo@redhat.com \
    --cc=pavel@ucw.cz \
    --cc=vicentiu.galanopulo@remote-tech.co.uk \
    --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.