All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <natechancellor@gmail.com>
To: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Arnd Bergmann <arnd@arndb.de>,
	"Peter Zijlstra \(Intel\)" <peterz@infradead.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Nick Desaulniers <ndesaulniers@google.com>,
	linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com,
	Andrew Murray <andrew.murray@arm.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] [v2] arm64: fix unreachable code issue with cmpxchg
Date: Wed, 18 Sep 2019 09:02:07 -0700	[thread overview]
Message-ID: <20190918160207.GA23613@archlinux-threadripper> (raw)
In-Reply-To: <20190918090240.5cc3rfcuenefisgr@willie-the-truck>

On Wed, Sep 18, 2019 at 10:02:41AM +0100, Will Deacon wrote:
> On Tue, Sep 17, 2019 at 01:34:25PM -0700, Nathan Chancellor wrote:
> > On Tue, Sep 10, 2019 at 01:56:22PM +0200, Arnd Bergmann wrote:
> > > On arm64 build with clang, sometimes the __cmpxchg_mb is not inlined
> > > when CONFIG_OPTIMIZE_INLINING is set.
> > > Clang then fails a compile-time assertion, because it cannot tell at
> > > compile time what the size of the argument is:
> > > 
> > > mm/memcontrol.o: In function `__cmpxchg_mb':
> > > memcontrol.c:(.text+0x1a4c): undefined reference to `__compiletime_assert_175'
> > > memcontrol.c:(.text+0x1a4c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `__compiletime_assert_175'
> > > 
> > > Mark all of the cmpxchg() style functions as __always_inline to
> > > ensure that the compiler can see the result.
> > > 
> > > Acked-by: Nick Desaulniers <ndesaulniers@google.com>
> > > Reported-by: Nathan Chancellor <natechancellor@gmail.com>
> > > Link: https://github.com/ClangBuiltLinux/linux/issues/648
> > > Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
> > > Tested-by: Nathan Chancellor <natechancellor@gmail.com>
> > > Reviewed-by: Andrew Murray <andrew.murray@arm.com>
> > > Tested-by: Andrew Murray <andrew.murray@arm.com>
> > > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > > ---
> > > v2: skip unneeded changes, as suggested by Andrew Murray
> > > ---
> > >  arch/arm64/include/asm/cmpxchg.h | 6 +++---
> > >  1 file changed, 3 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h
> > > index a1398f2f9994..f9bef42c1411 100644
> > > --- a/arch/arm64/include/asm/cmpxchg.h
> > > +++ b/arch/arm64/include/asm/cmpxchg.h
> > > @@ -62,7 +62,7 @@ __XCHG_CASE( ,  ,  mb_, 64, dmb ish, nop,  , a, l, "memory")
> > >  #undef __XCHG_CASE
> > >  
> > >  #define __XCHG_GEN(sfx)							\
> > > -static inline unsigned long __xchg##sfx(unsigned long x,		\
> > > +static __always_inline  unsigned long __xchg##sfx(unsigned long x,	\
> > >  					volatile void *ptr,		\
> > >  					int size)			\
> > >  {									\
> > > @@ -148,7 +148,7 @@ __CMPXCHG_DBL(_mb)
> > >  #undef __CMPXCHG_DBL
> > >  
> > >  #define __CMPXCHG_GEN(sfx)						\
> > > -static inline unsigned long __cmpxchg##sfx(volatile void *ptr,		\
> > > +static __always_inline unsigned long __cmpxchg##sfx(volatile void *ptr,	\
> > >  					   unsigned long old,		\
> > >  					   unsigned long new,		\
> > >  					   int size)			\
> > > @@ -255,7 +255,7 @@ __CMPWAIT_CASE( ,  , 64);
> > >  #undef __CMPWAIT_CASE
> > >  
> > >  #define __CMPWAIT_GEN(sfx)						\
> > > -static inline void __cmpwait##sfx(volatile void *ptr,			\
> > > +static __always_inline void __cmpwait##sfx(volatile void *ptr,		\
> > >  				  unsigned long val,			\
> > >  				  int size)				\
> > >  {									\
> > > -- 
> > > 2.20.0
> > > 
> > 
> > Looks like the arm64 pull request happened without this patch so clang
> > all{mod,yes}config builds are broken. Did the maintainers have any
> > further comments on it or could this make it in with the next one?
> 
> Fear not! I plan to send this with some other fixes we've got for -rc1.
> I just to get my CI scripts going again (new machine), but that shouldn't
> take long.
> 
> Will

Great, thank you!

Cheers,
Nathan

_______________________________________________
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: Nathan Chancellor <natechancellor@gmail.com>
To: Will Deacon <will@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Andrew Murray <andrew.murray@arm.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Mark Rutland <mark.rutland@arm.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com
Subject: Re: [PATCH] [v2] arm64: fix unreachable code issue with cmpxchg
Date: Wed, 18 Sep 2019 09:02:07 -0700	[thread overview]
Message-ID: <20190918160207.GA23613@archlinux-threadripper> (raw)
In-Reply-To: <20190918090240.5cc3rfcuenefisgr@willie-the-truck>

On Wed, Sep 18, 2019 at 10:02:41AM +0100, Will Deacon wrote:
> On Tue, Sep 17, 2019 at 01:34:25PM -0700, Nathan Chancellor wrote:
> > On Tue, Sep 10, 2019 at 01:56:22PM +0200, Arnd Bergmann wrote:
> > > On arm64 build with clang, sometimes the __cmpxchg_mb is not inlined
> > > when CONFIG_OPTIMIZE_INLINING is set.
> > > Clang then fails a compile-time assertion, because it cannot tell at
> > > compile time what the size of the argument is:
> > > 
> > > mm/memcontrol.o: In function `__cmpxchg_mb':
> > > memcontrol.c:(.text+0x1a4c): undefined reference to `__compiletime_assert_175'
> > > memcontrol.c:(.text+0x1a4c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `__compiletime_assert_175'
> > > 
> > > Mark all of the cmpxchg() style functions as __always_inline to
> > > ensure that the compiler can see the result.
> > > 
> > > Acked-by: Nick Desaulniers <ndesaulniers@google.com>
> > > Reported-by: Nathan Chancellor <natechancellor@gmail.com>
> > > Link: https://github.com/ClangBuiltLinux/linux/issues/648
> > > Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
> > > Tested-by: Nathan Chancellor <natechancellor@gmail.com>
> > > Reviewed-by: Andrew Murray <andrew.murray@arm.com>
> > > Tested-by: Andrew Murray <andrew.murray@arm.com>
> > > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > > ---
> > > v2: skip unneeded changes, as suggested by Andrew Murray
> > > ---
> > >  arch/arm64/include/asm/cmpxchg.h | 6 +++---
> > >  1 file changed, 3 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h
> > > index a1398f2f9994..f9bef42c1411 100644
> > > --- a/arch/arm64/include/asm/cmpxchg.h
> > > +++ b/arch/arm64/include/asm/cmpxchg.h
> > > @@ -62,7 +62,7 @@ __XCHG_CASE( ,  ,  mb_, 64, dmb ish, nop,  , a, l, "memory")
> > >  #undef __XCHG_CASE
> > >  
> > >  #define __XCHG_GEN(sfx)							\
> > > -static inline unsigned long __xchg##sfx(unsigned long x,		\
> > > +static __always_inline  unsigned long __xchg##sfx(unsigned long x,	\
> > >  					volatile void *ptr,		\
> > >  					int size)			\
> > >  {									\
> > > @@ -148,7 +148,7 @@ __CMPXCHG_DBL(_mb)
> > >  #undef __CMPXCHG_DBL
> > >  
> > >  #define __CMPXCHG_GEN(sfx)						\
> > > -static inline unsigned long __cmpxchg##sfx(volatile void *ptr,		\
> > > +static __always_inline unsigned long __cmpxchg##sfx(volatile void *ptr,	\
> > >  					   unsigned long old,		\
> > >  					   unsigned long new,		\
> > >  					   int size)			\
> > > @@ -255,7 +255,7 @@ __CMPWAIT_CASE( ,  , 64);
> > >  #undef __CMPWAIT_CASE
> > >  
> > >  #define __CMPWAIT_GEN(sfx)						\
> > > -static inline void __cmpwait##sfx(volatile void *ptr,			\
> > > +static __always_inline void __cmpwait##sfx(volatile void *ptr,		\
> > >  				  unsigned long val,			\
> > >  				  int size)				\
> > >  {									\
> > > -- 
> > > 2.20.0
> > > 
> > 
> > Looks like the arm64 pull request happened without this patch so clang
> > all{mod,yes}config builds are broken. Did the maintainers have any
> > further comments on it or could this make it in with the next one?
> 
> Fear not! I plan to send this with some other fixes we've got for -rc1.
> I just to get my CI scripts going again (new machine), but that shouldn't
> take long.
> 
> Will

Great, thank you!

Cheers,
Nathan

  reply	other threads:[~2019-09-18 16:02 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-10 11:56 [PATCH] [v2] arm64: fix unreachable code issue with cmpxchg Arnd Bergmann
2019-09-10 11:56 ` Arnd Bergmann
2019-09-17 20:34 ` Nathan Chancellor
2019-09-17 20:34   ` Nathan Chancellor
2019-09-18  9:02   ` Will Deacon
2019-09-18  9:02     ` Will Deacon
2019-09-18 16:02     ` Nathan Chancellor [this message]
2019-09-18 16:02       ` Nathan Chancellor

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=20190918160207.GA23613@archlinux-threadripper \
    --to=natechancellor@gmail.com \
    --cc=andrew.murray@arm.com \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=ndesaulniers@google.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --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.