From: Jisheng Zhang <jszhang@kernel.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Jason Baron <jbaron@akamai.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ard Biesheuvel <ardb@kernel.org>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] arm64: jump_label: mark arguments as const to satisfy asm constraints
Date: Thu, 6 Oct 2022 19:53:59 +0800 [thread overview]
Message-ID: <Yz7B1991xDY9ZtfL@xhacker> (raw)
In-Reply-To: <Yz6qksBFFj9Wo9M8@FVFF77S0Q05N.cambridge.arm.com>
On Thu, Oct 06, 2022 at 11:14:42AM +0100, Mark Rutland wrote:
> On Thu, Oct 06, 2022 at 03:55:41PM +0800, Jisheng Zhang wrote:
> > Inspired by x86 commit 864b435514b2("x86/jump_label: Mark arguments as
> > const to satisfy asm constraints"), mark arch_static_branch()'s and
> > arch_static_branch_jump()'s arguments as const to satisfy asm
> > constraints. And Steven in [1] also pointed out that "The "i"
> > constraint needs to be a constant."
>
> It needs to be a *compile-time constant*, but `const` on a function argument
> only ensures that the function can't modify the argument, not that it's a
compile-time constant is a subset of `const`.
> constant in the caller.
>
> I think this is a quirk of the optimizer rather than anything else.
I dunno compiler internals, just tried as commit 864b435514b2 suggested
the issue did disappear.
PS: I agree with you about this is a quirk or workaround.
>
> > Tested with building a simple external kernel module with "O0".
>
> Is building with `-O0` supported? I thought we required using `-O2` or above
> for a bunch of code that requires constant propagation, etc.
Per the information of Jason's reply in [1]: the reason tring O0/O1 is "to
play around with GCC's new static analyzer options".
While the reason I constify the arguments is that: in riscv world, even the
"-Os" can also reproduce the warnings and errors[2]. Grepping source found
arm64 also shares the same style, so these two patches.
[2]https://lore.kernel.org/linux-riscv/20220922060958.44203-1-samuel@sholland.org/
>
> I don't really have a problem with making this const, but I don't particularly
> want to try to "fix" all the other code that depends on constant propagation to
> assemble, and I'm worried this is the canary in the coal mine.
IMHO, it's a good idea to constify if the arguments can't be modified.
>
> Thanks,
> Mark.
>
> >
> > [1]https://lore.kernel.org/all/20210212094059.5f8d05e8@gandalf.local.home/
> >
> > Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
> > ---
> > arch/arm64/include/asm/jump_label.h | 8 ++++----
> > 1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm64/include/asm/jump_label.h b/arch/arm64/include/asm/jump_label.h
> > index cea441b6aa5d..48ddc0f45d22 100644
> > --- a/arch/arm64/include/asm/jump_label.h
> > +++ b/arch/arm64/include/asm/jump_label.h
> > @@ -15,8 +15,8 @@
> >
> > #define JUMP_LABEL_NOP_SIZE AARCH64_INSN_SIZE
> >
> > -static __always_inline bool arch_static_branch(struct static_key *key,
> > - bool branch)
> > +static __always_inline bool arch_static_branch(struct static_key * const key,
> > + const bool branch)
> > {
> > asm_volatile_goto(
> > "1: nop \n\t"
> > @@ -32,8 +32,8 @@ static __always_inline bool arch_static_branch(struct static_key *key,
> > return true;
> > }
> >
> > -static __always_inline bool arch_static_branch_jump(struct static_key *key,
> > - bool branch)
> > +static __always_inline bool arch_static_branch_jump(struct static_key * const key,
> > + const bool branch)
> > {
> > asm_volatile_goto(
> > "1: b %l[l_yes] \n\t"
> > --
> > 2.37.2
> >
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Jisheng Zhang <jszhang@kernel.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Jason Baron <jbaron@akamai.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ard Biesheuvel <ardb@kernel.org>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] arm64: jump_label: mark arguments as const to satisfy asm constraints
Date: Thu, 6 Oct 2022 19:53:59 +0800 [thread overview]
Message-ID: <Yz7B1991xDY9ZtfL@xhacker> (raw)
In-Reply-To: <Yz6qksBFFj9Wo9M8@FVFF77S0Q05N.cambridge.arm.com>
On Thu, Oct 06, 2022 at 11:14:42AM +0100, Mark Rutland wrote:
> On Thu, Oct 06, 2022 at 03:55:41PM +0800, Jisheng Zhang wrote:
> > Inspired by x86 commit 864b435514b2("x86/jump_label: Mark arguments as
> > const to satisfy asm constraints"), mark arch_static_branch()'s and
> > arch_static_branch_jump()'s arguments as const to satisfy asm
> > constraints. And Steven in [1] also pointed out that "The "i"
> > constraint needs to be a constant."
>
> It needs to be a *compile-time constant*, but `const` on a function argument
> only ensures that the function can't modify the argument, not that it's a
compile-time constant is a subset of `const`.
> constant in the caller.
>
> I think this is a quirk of the optimizer rather than anything else.
I dunno compiler internals, just tried as commit 864b435514b2 suggested
the issue did disappear.
PS: I agree with you about this is a quirk or workaround.
>
> > Tested with building a simple external kernel module with "O0".
>
> Is building with `-O0` supported? I thought we required using `-O2` or above
> for a bunch of code that requires constant propagation, etc.
Per the information of Jason's reply in [1]: the reason tring O0/O1 is "to
play around with GCC's new static analyzer options".
While the reason I constify the arguments is that: in riscv world, even the
"-Os" can also reproduce the warnings and errors[2]. Grepping source found
arm64 also shares the same style, so these two patches.
[2]https://lore.kernel.org/linux-riscv/20220922060958.44203-1-samuel@sholland.org/
>
> I don't really have a problem with making this const, but I don't particularly
> want to try to "fix" all the other code that depends on constant propagation to
> assemble, and I'm worried this is the canary in the coal mine.
IMHO, it's a good idea to constify if the arguments can't be modified.
>
> Thanks,
> Mark.
>
> >
> > [1]https://lore.kernel.org/all/20210212094059.5f8d05e8@gandalf.local.home/
> >
> > Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
> > ---
> > arch/arm64/include/asm/jump_label.h | 8 ++++----
> > 1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm64/include/asm/jump_label.h b/arch/arm64/include/asm/jump_label.h
> > index cea441b6aa5d..48ddc0f45d22 100644
> > --- a/arch/arm64/include/asm/jump_label.h
> > +++ b/arch/arm64/include/asm/jump_label.h
> > @@ -15,8 +15,8 @@
> >
> > #define JUMP_LABEL_NOP_SIZE AARCH64_INSN_SIZE
> >
> > -static __always_inline bool arch_static_branch(struct static_key *key,
> > - bool branch)
> > +static __always_inline bool arch_static_branch(struct static_key * const key,
> > + const bool branch)
> > {
> > asm_volatile_goto(
> > "1: nop \n\t"
> > @@ -32,8 +32,8 @@ static __always_inline bool arch_static_branch(struct static_key *key,
> > return true;
> > }
> >
> > -static __always_inline bool arch_static_branch_jump(struct static_key *key,
> > - bool branch)
> > +static __always_inline bool arch_static_branch_jump(struct static_key * const key,
> > + const bool branch)
> > {
> > asm_volatile_goto(
> > "1: b %l[l_yes] \n\t"
> > --
> > 2.37.2
> >
next prev parent reply other threads:[~2022-10-06 12:04 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-06 7:55 [PATCH 0/2] arm64: constify arguments to satisfy asm constraints Jisheng Zhang
2022-10-06 7:55 ` Jisheng Zhang
2022-10-06 7:55 ` [PATCH 1/2] arm64: jump_label: mark arguments as const " Jisheng Zhang
2022-10-06 7:55 ` Jisheng Zhang
2022-10-06 8:17 ` Ard Biesheuvel
2022-10-06 8:17 ` Ard Biesheuvel
2022-10-06 8:46 ` Jisheng Zhang
2022-10-06 8:46 ` Jisheng Zhang
2022-10-06 8:55 ` Jisheng Zhang
2022-10-06 8:55 ` Jisheng Zhang
2022-10-06 9:08 ` Ard Biesheuvel
2022-10-06 9:08 ` Ard Biesheuvel
2022-10-06 11:04 ` Jisheng Zhang
2022-10-06 11:04 ` Jisheng Zhang
2022-10-06 10:14 ` Mark Rutland
2022-10-06 10:14 ` Mark Rutland
2022-10-06 11:53 ` Jisheng Zhang [this message]
2022-10-06 11:53 ` Jisheng Zhang
2022-10-06 7:55 ` [PATCH 2/2] arm64: alternative: constify alternative_has_feature_* argument Jisheng Zhang
2022-10-06 7:55 ` Jisheng Zhang
2022-11-07 19:08 ` [PATCH 0/2] arm64: constify arguments to satisfy asm constraints Will Deacon
2022-11-07 19:08 ` Will Deacon
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=Yz7B1991xDY9ZtfL@xhacker \
--to=jszhang@kernel.org \
--cc=ardb@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=jbaron@akamai.com \
--cc=jpoimboe@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--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.