All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)"
	<x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Andriy Shevchenko <andriy.shevchenko@intel.com>,
	Dan Williams <dan.j.williams@intel.com>
Subject: Re: [PATCH v4 1/2] x86: fix bitops.h warning with a moved cast
Date: Mon, 24 Feb 2020 10:54:02 +0100	[thread overview]
Message-ID: <20200224095402.GD14897@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <CAHp75Vc=9aSt1DH-LzDHnX1+fnPpkJWHkkh0-ApTL0zm+ZA2oQ@mail.gmail.com>

On Sat, Feb 22, 2020 at 11:39:57AM +0200, Andy Shevchenko wrote:
> On Sat, Feb 22, 2020 at 2:04 AM Jesse Brandeburg

> > -#define CONST_MASK(nr)                 (1 << ((nr) & 7))
> > +#define CONST_MASK(nr)                 ((u8)1 << ((nr) & 7))
> >
> >  static __always_inline void
> >  arch_set_bit(long nr, volatile unsigned long *addr)
> > @@ -54,7 +54,7 @@ arch_set_bit(long nr, volatile unsigned long *addr)
> >         if (__builtin_constant_p(nr)) {
> >                 asm volatile(LOCK_PREFIX "orb %1,%0"
> >                         : CONST_MASK_ADDR(nr, addr)
> > -                       : "iq" ((u8)CONST_MASK(nr))
> > +                       : "iq" (CONST_MASK(nr))

Note how this is not equivalent, the old code actually handed in a u8
while the new code hands int. By moving the (u8) cast into the parens,
you casl 1 to u8, which then instantly gets promoted to 'int' due to the
'<<' operator.

> >                         : "memory");
> >         } else {
> >                 asm volatile(LOCK_PREFIX __ASM_SIZE(bts) " %1,%0"
> > @@ -74,7 +74,7 @@ arch_clear_bit(long nr, volatile unsigned long *addr)
> >         if (__builtin_constant_p(nr)) {
> >                 asm volatile(LOCK_PREFIX "andb %1,%0"
> >                         : CONST_MASK_ADDR(nr, addr)
> > -                       : "iq" ((u8)~CONST_MASK(nr)));
> > +                       : "iq" (CONST_MASK(nr) ^ 0xff));
> 
> I'm wondering if the original, by Peter Z, order allows us to drop
> (u8) casting in the CONST_MASK completely.

I'm thinking it's all nonsense anyway :-), the result of either << or ^
is always promoted to int anyway.

The sparse complaint was that ~CONST_MASK(nr) had high bits set which
were lost, which is true, but a copmletely stupid warning IMO.

By using 0xff ^ CONST_MASK(nr), those bits will not be set and will not
be lost.

None of that has anything to do with where we place a pointless cast
more or less.

  reply	other threads:[~2020-02-24  9:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-22  0:02 [PATCH v4 1/2] x86: fix bitops.h warning with a moved cast Jesse Brandeburg
2020-02-22  0:02 ` [PATCH v4 2/2] lib: make a test module with set/clear bit Jesse Brandeburg
2020-02-22  9:39 ` [PATCH v4 1/2] x86: fix bitops.h warning with a moved cast Andy Shevchenko
2020-02-24  9:54   ` Peter Zijlstra [this message]
2020-02-24 17:00     ` Jesse Brandeburg

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=20200224095402.GD14897@hirez.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=andriy.shevchenko@intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=bp@alien8.de \
    --cc=dan.j.williams@intel.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --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 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.