Re: [RFC] LKMM: Add volatile_if()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jun 04, 2021 at 06:37:22PM +0200, Peter Zijlstra wrote:
> On Fri, Jun 04, 2021 at 09:30:01AM -0700, Linus Torvalds wrote:
> > Why is "volatile_if()" not just
> > 
> >        #define barier_true() ({ barrier(); 1; })
> > 
> >        #define volatile_if(x) if ((x) && barrier_true())
> > 
> > because that should essentially cause the same thing - the compiler
> > should be *forced* to create one conditional branch (because "barrier"
> > is an asm that can't be done on the false side, so it can't do it with
> > arithmetic or other games), and after that we're done.
> > 
> > No need for per-architecture "asm goto" games. No new memory barriers.
> > No actual new code generation (except for the empty asm volatile that
> > is a barrier).
> 
> Because we weren't sure compilers weren't still allowed to optimize the
> branch away.

barrier_true is a volatile asm, so it should be executed on the real
machine exactly as often as on the abstract machine (and in order with
other side effects).  And the && short-circuits, so you will always have
the same effect as a branch.  But there of course is nothing that forces
there to be a branch (as a silly example, the compiler could convert
some control flow to go via computed return addresses).


Segher



[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux