[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CA+55aFxOewuXpjKv02wufoBbEHOssTvTOL4iw6PAf3ypSvCKOQ@mail.gmail.com>
Date: Thu, 4 Jan 2018 14:23:25 -0800
From: Linus Torvalds <torvalds@...ux-foundation.org>
To: Dan Williams <dan.j.williams@...el.com>
Cc: Pavel Machek <pavel@....cz>, Julia Lawall <julia.lawall@...6.fr>,
Alan Cox <gnomes@...rguk.ukuu.org.uk>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Mark Rutland <mark.rutland@....com>,
linux-arch@...r.kernel.org, Peter Zijlstra <peterz@...radead.org>,
Greg KH <gregkh@...uxfoundation.org>,
Thomas Gleixner <tglx@...utronix.de>,
Elena Reshetova <elena.reshetova@...el.com>,
Alan Cox <alan@...ux.intel.com>,
Dan Carpenter <dan.carpenter@...cle.com>
Subject: Re: [RFC PATCH] asm/generic: introduce if_nospec and nospec_barrier
On Thu, Jan 4, 2018 at 2:20 PM, Linus Torvalds
<torvalds@...ux-foundation.org> wrote:
>
> #define array_access(base, idx, max) ({ \
> union { typeof(base[0]) _val; unsigned long _bit; } __u;\
> unsigned long _i = (idx); \
> unsigned long _m = (max); \
> unsigned long _mask = _i < _m ? ~0 : 0; \
> OPTIMIZER_HIDE_VAR(_mask); \
> __u._val = base[_i & _mask]; \
> __u._bit &= _mask; \
> __u._val; })
That
__u._val = base[_i & _mask];
thing would have to be READ_ONCE() to make it all ok for the special
cases without locking etc.
Linus
Powered by blists - more mailing lists