All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <natechancellor@gmail.com>
To: Nick Desaulniers <ndesaulniers@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Jesse Brandeburg <jesse.brandeburg@intel.com>,
	Sedat Dilek <sedat.dilek@gmail.com>,
	"kernelci . org bot" <bot@kernelci.org>,
	Andy Shevchenko <andriy.shevchenko@intel.com>,
	Brian Gerst <brgerst@gmail.com>,
	"H . Peter Anvin" <hpa@zytor.com>,
	Ilie Halip <ilie.halip@gmail.com>,
	x86@kernel.org, Marco Elver <elver@google.com>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Luc Van Oostenryck <luc.vanoostenryck@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Daniel Axtens <dja@axtens.net>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com
Subject: Re: [PATCH v5] x86: bitops: fix build regression
Date: Fri, 8 May 2020 13:28:35 -0700	[thread overview]
Message-ID: <20200508202835.GA550540@ubuntu-s3-xlarge-x86> (raw)
In-Reply-To: <20200508183230.229464-1-ndesaulniers@google.com>

On Fri, May 08, 2020 at 11:32:29AM -0700, Nick Desaulniers wrote:
> This is easily reproducible via CC=clang+CONFIG_STAGING=y+CONFIG_VT6656=m.
> 
> It turns out that if your config tickles __builtin_constant_p via
> differences in choices to inline or not, these statements produce
> invalid assembly:
> 
> $ cat foo.c
> long a(long b, long c) {
>   asm("orb\t%1, %0" : "+q"(c): "r"(b));
>   return c;
> }
> $ gcc foo.c
> foo.c: Assembler messages:
> foo.c:2: Error: `%rax' not allowed with `orb'
> 
> Use the `%b` "x86 Operand Modifier" to instead force register allocation
> to select a lower-8-bit GPR operand.
> 
> The "q" constraint only has meaning on -m32 otherwise is treated as
> "r". Not all GPRs have low-8-bit aliases for -m32.
> 
> Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>
> Link: https://github.com/ClangBuiltLinux/linux/issues/961
> Link: https://lore.kernel.org/lkml/20200504193524.GA221287@google.com/
> Link: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#x86Operandmodifiers
> Fixes: 1651e700664b4 ("x86: Fix bitops.h warning with a moved cast")
> Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
> Reported-by: kernelci.org bot <bot@kernelci.org>
> Suggested-by: Andy Shevchenko <andriy.shevchenko@intel.com>
> Suggested-by: Brian Gerst <brgerst@gmail.com>
> Suggested-by: H. Peter Anvin <hpa@zytor.com>
> Suggested-by: Ilie Halip <ilie.halip@gmail.com>
> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>

Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
Tested-by: Nathan Chancellor <natechancellor@gmail.com> # build, clang-11

> ---
> Changes V4 -> V5:
> * actually use `%b` in arch_change_bit().
> 
> Changes V3 -> V4:
> * drop (u8) cast from arch_change_bit() as well.
> 
> Changes V2 -> V3:
> * use `%b` "x86 Operand Modifier" instead of bitwise op then cast.
> * reword commit message.
> * add Brian and HPA suggested by tags
> * drop Nathan & Sedat Tested by/reviewed by tags (new patch is different
>   enough).
> * Take over authorship.
> 
> Changes V1 -> V2:
> * change authorship/signed-off-by to Ilie
> * add Nathan's Tested by/reviewed by
> * update commit message slightly with info sent to HPA.
>  arch/x86/include/asm/bitops.h | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h
> index b392571c1f1d..35460fef39b8 100644
> --- a/arch/x86/include/asm/bitops.h
> +++ b/arch/x86/include/asm/bitops.h
> @@ -52,9 +52,9 @@ static __always_inline void
>  arch_set_bit(long nr, volatile unsigned long *addr)
>  {
>  	if (__builtin_constant_p(nr)) {
> -		asm volatile(LOCK_PREFIX "orb %1,%0"
> +		asm volatile(LOCK_PREFIX "orb %b1,%0"
>  			: CONST_MASK_ADDR(nr, addr)
> -			: "iq" (CONST_MASK(nr) & 0xff)
> +			: "iq" (CONST_MASK(nr))
>  			: "memory");
>  	} else {
>  		asm volatile(LOCK_PREFIX __ASM_SIZE(bts) " %1,%0"
> @@ -72,9 +72,9 @@ static __always_inline void
>  arch_clear_bit(long nr, volatile unsigned long *addr)
>  {
>  	if (__builtin_constant_p(nr)) {
> -		asm volatile(LOCK_PREFIX "andb %1,%0"
> +		asm volatile(LOCK_PREFIX "andb %b1,%0"
>  			: CONST_MASK_ADDR(nr, addr)
> -			: "iq" (CONST_MASK(nr) ^ 0xff));
> +			: "iq" (~CONST_MASK(nr)));
>  	} else {
>  		asm volatile(LOCK_PREFIX __ASM_SIZE(btr) " %1,%0"
>  			: : RLONG_ADDR(addr), "Ir" (nr) : "memory");
> @@ -123,9 +123,9 @@ static __always_inline void
>  arch_change_bit(long nr, volatile unsigned long *addr)
>  {
>  	if (__builtin_constant_p(nr)) {
> -		asm volatile(LOCK_PREFIX "xorb %1,%0"
> +		asm volatile(LOCK_PREFIX "xorb %b1,%0"
>  			: CONST_MASK_ADDR(nr, addr)
> -			: "iq" ((u8)CONST_MASK(nr)));
> +			: "iq" (CONST_MASK(nr)));
>  	} else {
>  		asm volatile(LOCK_PREFIX __ASM_SIZE(btc) " %1,%0"
>  			: : RLONG_ADDR(addr), "Ir" (nr) : "memory");
> -- 
> 2.26.2.645.ge9eca65c58-goog
> 

  reply	other threads:[~2020-05-08 20:28 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-05 17:44 [PATCH] x86: bitops: fix build regression Nick Desaulniers
2020-05-05 18:07 ` hpa
2020-05-05 18:22   ` Nick Desaulniers
2020-05-07 11:34   ` Peter Zijlstra
2020-05-07 14:00     ` Brian Gerst
2020-05-07 19:19       ` Nick Desaulniers
2020-05-07 22:29         ` Nick Desaulniers
2020-05-08  1:57           ` Brian Gerst
2020-05-08 17:21             ` Nick Desaulniers
2020-05-08 17:31               ` H. Peter Anvin
2020-05-08 18:05                 ` [PATCH v3] " Nick Desaulniers
2020-05-08 18:08                   ` Nick Desaulniers
2020-05-08 18:22                   ` Brian Gerst
2020-05-08 18:28                     ` [PATCH v4] " Nick Desaulniers
2020-05-08 18:32                       ` [PATCH v5] " Nick Desaulniers
2020-05-08 20:28                         ` Nathan Chancellor [this message]
2020-05-08 23:47                           ` Jesse Brandeburg
2020-05-09  4:44                             ` Sedat Dilek
2020-05-09 12:20                         ` Andy Shevchenko
2020-05-09 15:43                           ` Brian Gerst
2020-05-11 17:22                           ` Nick Desaulniers
2020-05-10 13:54                         ` David Laight
2020-05-11 18:52                         ` Brian Gerst
2020-05-14 23:47                           ` Nick Desaulniers
2020-05-10 11:59                 ` [PATCH] " David Laight
2020-05-10 12:33                   ` hpa
2020-05-07 19:29     ` hpa
2020-05-06  4:30 ` Nathan Chancellor
2020-05-06  9:22   ` Sedat Dilek
2020-05-06 15:41   ` Nathan Chancellor
2020-05-06 16:37   ` Nick Desaulniers
2020-05-06 16:55     ` Ilie Halip
2020-05-06 17:05       ` [PATCH v2] " Nick Desaulniers
2020-05-07  6:18 ` [PATCH] " Brian Gerst
2020-05-07  7:02   ` hpa
2020-05-07 13:32     ` Brian Gerst
2020-05-07 15:09       ` David Laight
2020-05-07 19:31         ` hpa
2020-05-07 19:29       ` hpa
2020-05-07  7:44   ` David Laight
2020-05-07  7:59     ` hpa
2020-05-07  8:35       ` David Laight
2020-05-07  8:38         ` hpa
2020-05-07  9:17     ` Andy Shevchenko
2020-05-07 19:22   ` Nick Desaulniers

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=20200508202835.GA550540@ubuntu-s3-xlarge-x86 \
    --to=natechancellor@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@intel.com \
    --cc=aryabinin@virtuozzo.com \
    --cc=bot@kernelci.org \
    --cc=bp@alien8.de \
    --cc=brgerst@gmail.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=dja@axtens.net \
    --cc=elver@google.com \
    --cc=hpa@zytor.com \
    --cc=ilie.halip@gmail.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luc.vanoostenryck@gmail.com \
    --cc=mingo@redhat.com \
    --cc=ndesaulniers@google.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=sedat.dilek@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=yamada.masahiro@socionext.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 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.