From: Mark Rutland <mark.rutland@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: bigeasy@linutronix.de, maz@kernel.org, catalin.marinas@arm.com,
will@kernel.org, chenhuacai@kernel.org, kernel@xen0n.name,
hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com,
borntraeger@linux.ibm.com, svens@linux.ibm.com,
pbonzini@redhat.com, wanpengli@tencent.com, vkuznets@redhat.com,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
jgross@suse.com, boris.ostrovsky@oracle.com,
daniel.lezcano@linaro.org, kys@microsoft.com,
haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com,
rafael@kernel.org, longman@redhat.com, boqun.feng@gmail.com,
pmladek@suse.com, senozhatsky@chromium.org, rostedt@goodmis.org,
john.ogness@linutronix.de, juri.lelli@redhat.com,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
bsegall@google.com, mgorman@suse.de, bristot@redhat.com,
vschneid@redhat.com, jstultz@google.com, sboyd@kernel.org,
linux-kernel@vger.kernel.org, loongarch@lists.linux.dev,
linux-s390@vger.kernel.org, kvm@vger.kernel.org,
linux-hyperv@vger.kernel.org, linux-pm@vger.kernel.org
Subject: Re: [RFC][PATCH 3/9] arm64/io: Always inline all of __raw_{read,write}[bwlq]()
Date: Tue, 9 May 2023 15:51:51 +0100 [thread overview]
Message-ID: <ZFpeBzFD4N5Cuwcb@FVFF77S0Q05N.cambridge.arm.com> (raw)
In-Reply-To: <20230508213147.583344579@infradead.org>
On Mon, May 08, 2023 at 11:19:54PM +0200, Peter Zijlstra wrote:
> The next patch will want to use __raw_readl() from a noinstr section
> and as such that needs to be marked __always_inline to avoid the
> compiler being a silly bugger.
>
> Turns out it already is, but its siblings are not.
>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
FWIW, on arm64 we shouldn't ever end up with the MMIO counter being our
{sched,local}_clock() -- several things blow up if we don't have the "CP15"
version, and if we do have the CP15 version we'll use that as our preferred
clocksource (and yes, the code is a mess).
Regardless, for consistency I agree we should mark these all as __always_inline.
It looks like we marked __raw_{readl,writel}() as noinstr in commit:
e43f1331e2ef913b ("arm64: Ask the compiler to __always_inline functions used by KVM at HYP")
... and it'd be nice to mention that in the commit message.
Thanks,
Mark.
> ---
> arch/arm64/include/asm/io.h | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> --- a/arch/arm64/include/asm/io.h
> +++ b/arch/arm64/include/asm/io.h
> @@ -22,13 +22,13 @@
> * Generic IO read/write. These perform native-endian accesses.
> */
> #define __raw_writeb __raw_writeb
> -static inline void __raw_writeb(u8 val, volatile void __iomem *addr)
> +static __always_inline void __raw_writeb(u8 val, volatile void __iomem *addr)
> {
> asm volatile("strb %w0, [%1]" : : "rZ" (val), "r" (addr));
> }
>
> #define __raw_writew __raw_writew
> -static inline void __raw_writew(u16 val, volatile void __iomem *addr)
> +static __always_inline void __raw_writew(u16 val, volatile void __iomem *addr)
> {
> asm volatile("strh %w0, [%1]" : : "rZ" (val), "r" (addr));
> }
> @@ -40,13 +40,13 @@ static __always_inline void __raw_writel
> }
>
> #define __raw_writeq __raw_writeq
> -static inline void __raw_writeq(u64 val, volatile void __iomem *addr)
> +static __always_inline void __raw_writeq(u64 val, volatile void __iomem *addr)
> {
> asm volatile("str %x0, [%1]" : : "rZ" (val), "r" (addr));
> }
>
> #define __raw_readb __raw_readb
> -static inline u8 __raw_readb(const volatile void __iomem *addr)
> +static __always_inline u8 __raw_readb(const volatile void __iomem *addr)
> {
> u8 val;
> asm volatile(ALTERNATIVE("ldrb %w0, [%1]",
> @@ -57,7 +57,7 @@ static inline u8 __raw_readb(const volat
> }
>
> #define __raw_readw __raw_readw
> -static inline u16 __raw_readw(const volatile void __iomem *addr)
> +static __always_inline u16 __raw_readw(const volatile void __iomem *addr)
> {
> u16 val;
>
> @@ -80,7 +80,7 @@ static __always_inline u32 __raw_readl(c
> }
>
> #define __raw_readq __raw_readq
> -static inline u64 __raw_readq(const volatile void __iomem *addr)
> +static __always_inline u64 __raw_readq(const volatile void __iomem *addr)
> {
> u64 val;
> asm volatile(ALTERNATIVE("ldr %0, [%1]",
>
>
next prev parent reply other threads:[~2023-05-09 14:52 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-08 21:19 [RFC][PATCH 0/9] local_clock() vs noinstr Peter Zijlstra
2023-05-08 21:19 ` [RFC][PATCH 1/9] seqlock/latch: Provide raw_read_seqcount_latch_retry() Peter Zijlstra
2023-05-09 8:13 ` Thomas Gleixner
2023-05-10 7:58 ` Petr Mladek
2023-05-08 21:19 ` [RFC][PATCH 2/9] time/sched_clock: Provide sched_clock_noinstr() Peter Zijlstra
2023-05-08 21:19 ` [RFC][PATCH 3/9] arm64/io: Always inline all of __raw_{read,write}[bwlq]() Peter Zijlstra
2023-05-09 14:51 ` Mark Rutland [this message]
2023-05-08 21:19 ` [RFC][PATCH 4/9] arm64/arch_timer: Provide noinstr sched_clock_read() functions Peter Zijlstra
2023-05-08 21:19 ` [RFC][PATCH 5/9] loongarch: Provide noinstr sched_clock_read() Peter Zijlstra
2023-05-08 21:19 ` [RFC][PATCH 6/9] s390/time: Provide sched_clock_noinstr() Peter Zijlstra
2023-05-09 6:13 ` Heiko Carstens
2023-05-09 6:42 ` Peter Zijlstra
2023-05-08 21:19 ` [RFC][PATCH 7/9] x86/tsc: " Peter Zijlstra
2023-05-08 21:44 ` Peter Zijlstra
2023-05-08 23:30 ` Wei Liu
2023-05-11 20:23 ` Peter Zijlstra
2023-05-11 23:11 ` Michael Kelley (LINUX)
2023-05-12 6:00 ` Peter Zijlstra
2023-05-17 2:26 ` Michael Kelley (LINUX)
2023-05-17 11:13 ` Peter Zijlstra
2023-05-08 21:19 ` [RFC][PATCH 8/9] sched/clock: Provide local_clock_noinstr() Peter Zijlstra
2023-05-08 21:20 ` [RFC][PATCH 9/9] cpuidle: Use local_clock_noinstr() Peter Zijlstra
2023-05-09 16:18 ` Rafael J. Wysocki
2023-05-09 19:02 ` Peter Zijlstra
2023-05-10 13:43 ` [RFC][PATCH 0/9] local_clock() vs noinstr Sebastian Andrzej Siewior
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=ZFpeBzFD4N5Cuwcb@FVFF77S0Q05N.cambridge.arm.com \
--to=mark.rutland@arm.com \
--cc=agordeev@linux.ibm.com \
--cc=bigeasy@linutronix.de \
--cc=boqun.feng@gmail.com \
--cc=boris.ostrovsky@oracle.com \
--cc=borntraeger@linux.ibm.com \
--cc=bp@alien8.de \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=daniel.lezcano@linaro.org \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=dietmar.eggemann@arm.com \
--cc=gor@linux.ibm.com \
--cc=haiyangz@microsoft.com \
--cc=hca@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=john.ogness@linutronix.de \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kernel@xen0n.name \
--cc=kvm@vger.kernel.org \
--cc=kys@microsoft.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=longman@redhat.com \
--cc=loongarch@lists.linux.dev \
--cc=maz@kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=rafael@kernel.org \
--cc=rostedt@goodmis.org \
--cc=sboyd@kernel.org \
--cc=senozhatsky@chromium.org \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=vincent.guittot@linaro.org \
--cc=vkuznets@redhat.com \
--cc=vschneid@redhat.com \
--cc=wanpengli@tencent.com \
--cc=wei.liu@kernel.org \
--cc=will@kernel.org \
--cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox