From: Steven Rostedt <rostedt@goodmis.org>
To: Marco Elver <elver@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Kees Cook <keescook@chromium.org>,
Guenter Roeck <linux@roeck-us.net>,
Peter Zijlstra <peterz@infradead.org>,
Mark Rutland <mark.rutland@arm.com>,
Marc Zyngier <maz@kernel.org>,
Oliver Upton <oliver.upton@linux.dev>,
James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Tom Rix <trix@redhat.com>, Miguel Ojeda <ojeda@kernel.org>,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kernel@vger.kernel.org, llvm@lists.linux.dev,
Dmitry Vyukov <dvyukov@google.com>,
Alexander Potapenko <glider@google.com>,
kasan-dev@googlegroups.com, linux-toolchains@vger.kernel.org
Subject: Re: [PATCH v2 2/3] list_debug: Introduce inline wrappers for debug checks
Date: Fri, 4 Aug 2023 12:03:08 -0400 [thread overview]
Message-ID: <20230804120308.253c5521@gandalf.local.home> (raw)
In-Reply-To: <20230804090621.400-2-elver@google.com>
On Fri, 4 Aug 2023 11:02:57 +0200
Marco Elver <elver@google.com> wrote:
> Turn the list debug checking functions __list_*_valid() into inline
> functions that wrap the out-of-line functions. Care is taken to ensure
> the inline wrappers are always inlined, so that additional compiler
> instrumentation (such as sanitizers) does not result in redundant
> outlining.
>
> This change is preparation for performing checks in the inline wrappers.
>
> No functional change intended.
I think the entire underscoring functions calling more underscoring
functions in the kernel is an abomination. Yes, there's lots of precedence
to this craziness, but let's not extend it.
Can we give actual real names to why the function is "special" besides that
it now has another underscore added to it?
I've been guilty of this madness myself, but I have learned the errors of
my ways, and have been avoiding doing so in any new code I write.
-- Steve
>
> Signed-off-by: Marco Elver <elver@google.com>
> ---
> arch/arm64/kvm/hyp/nvhe/list_debug.c | 6 +++---
> include/linux/list.h | 15 +++++++++++++--
> lib/list_debug.c | 11 +++++------
> 3 files changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/list_debug.c b/arch/arm64/kvm/hyp/nvhe/list_debug.c
> index d68abd7ea124..589284496ac5 100644
> --- a/arch/arm64/kvm/hyp/nvhe/list_debug.c
> +++ b/arch/arm64/kvm/hyp/nvhe/list_debug.c
> @@ -26,8 +26,8 @@ static inline __must_check bool nvhe_check_data_corruption(bool v)
>
> /* The predicates checked here are taken from lib/list_debug.c. */
>
> -bool __list_add_valid(struct list_head *new, struct list_head *prev,
> - struct list_head *next)
> +bool ___list_add_valid(struct list_head *new, struct list_head *prev,
> + struct list_head *next)
> {
> if (NVHE_CHECK_DATA_CORRUPTION(next->prev != prev) ||
> NVHE_CHECK_DATA_CORRUPTION(prev->next != next) ||
> @@ -37,7 +37,7 @@ bool __list_add_valid(struct list_head *new, struct list_head *prev,
> return true;
> }
>
> -bool __list_del_entry_valid(struct list_head *entry)
> +bool ___list_del_entry_valid(struct list_head *entry)
> {
> struct list_head *prev, *next;
>
> diff --git a/include/linux/list.h b/include/linux/list.h
> index f10344dbad4d..e0b2cf904409 100644
> --- a/include/linux/list.h
> +++ b/include/linux/list.h
> @@ -39,10 +39,21 @@ static inline void INIT_LIST_HEAD(struct list_head *list)
> }
>
> #ifdef CONFIG_DEBUG_LIST
> -extern bool __list_add_valid(struct list_head *new,
> +extern bool ___list_add_valid(struct list_head *new,
> struct list_head *prev,
> struct list_head *next);
> -extern bool __list_del_entry_valid(struct list_head *entry);
> +static __always_inline bool __list_add_valid(struct list_head *new,
> + struct list_head *prev,
> + struct list_head *next)
> +{
> + return ___list_add_valid(new, prev, next);
> +}
> +
> +extern bool ___list_del_entry_valid(struct list_head *entry);
> +static __always_inline bool __list_del_entry_valid(struct list_head *entry)
> +{
> + return ___list_del_entry_valid(entry);
> +}
> #else
> static inline bool __list_add_valid(struct list_head *new,
> struct list_head *prev,
> diff --git a/lib/list_debug.c b/lib/list_debug.c
> index d98d43f80958..fd69009cc696 100644
> --- a/lib/list_debug.c
> +++ b/lib/list_debug.c
> @@ -17,8 +17,8 @@
> * attempt).
> */
>
> -bool __list_add_valid(struct list_head *new, struct list_head *prev,
> - struct list_head *next)
> +bool ___list_add_valid(struct list_head *new, struct list_head *prev,
> + struct list_head *next)
> {
> if (CHECK_DATA_CORRUPTION(prev == NULL,
> "list_add corruption. prev is NULL.\n") ||
> @@ -37,9 +37,9 @@ bool __list_add_valid(struct list_head *new, struct list_head *prev,
>
> return true;
> }
> -EXPORT_SYMBOL(__list_add_valid);
> +EXPORT_SYMBOL(___list_add_valid);
>
> -bool __list_del_entry_valid(struct list_head *entry)
> +bool ___list_del_entry_valid(struct list_head *entry)
> {
> struct list_head *prev, *next;
>
> @@ -65,6 +65,5 @@ bool __list_del_entry_valid(struct list_head *entry)
> return false;
>
> return true;
> -
> }
> -EXPORT_SYMBOL(__list_del_entry_valid);
> +EXPORT_SYMBOL(___list_del_entry_valid);
next prev parent reply other threads:[~2023-08-04 16:03 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-04 9:02 [PATCH v2 1/3] compiler_types: Introduce the Clang __preserve_most function attribute Marco Elver
2023-08-04 9:02 ` [PATCH v2 2/3] list_debug: Introduce inline wrappers for debug checks Marco Elver
2023-08-04 16:03 ` Steven Rostedt [this message]
2023-08-04 17:49 ` Marco Elver
2023-08-04 17:57 ` Steven Rostedt
2023-08-04 17:59 ` Steven Rostedt
2023-08-04 18:08 ` Marco Elver
2023-08-04 18:19 ` Peter Zijlstra
2023-08-05 6:30 ` Miguel Ojeda
2023-08-04 9:02 ` [PATCH v2 3/3] list_debug: Introduce CONFIG_DEBUG_LIST_MINIMAL Marco Elver
2023-08-04 15:58 ` [PATCH v2 1/3] compiler_types: Introduce the Clang __preserve_most function attribute Steven Rostedt
2023-08-04 18:14 ` Peter Zijlstra
2023-08-05 6:35 ` Miguel Ojeda
2023-08-07 11:41 ` Florian Weimer
2023-08-07 12:24 ` Marco Elver
2023-08-07 12:36 ` Florian Weimer
2023-08-07 13:07 ` Marco Elver
2023-08-07 15:06 ` Peter Zijlstra
2023-08-07 12:38 ` Jakub Jelinek
2023-08-07 12:43 ` Florian Weimer
2023-08-07 13:06 ` Jakub Jelinek
2023-08-07 12:31 ` Peter Zijlstra
2023-08-08 2:16 ` Steven Rostedt
2023-08-07 15:27 ` Nick Desaulniers
2023-08-08 10:57 ` Peter Zijlstra
2023-08-08 11:41 ` Florian Weimer
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=20230804120308.253c5521@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=catalin.marinas@arm.com \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=glider@google.com \
--cc=james.morse@arm.com \
--cc=kasan-dev@googlegroups.com \
--cc=keescook@chromium.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-toolchains@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=llvm@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=ojeda@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=peterz@infradead.org \
--cc=suzuki.poulose@arm.com \
--cc=trix@redhat.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).