• P
    seqcount: Introduce raw_write_seqcount_barrier() · c4bfa3f5
    Peter Zijlstra 提交于
    Introduce raw_write_seqcount_barrier(), a new construct that can be
    used to provide write barrier semantics in seqcount read loops instead
    of the usual consistency guarantee.
    
    raw_write_seqcount_barier() is equivalent to:
    
    	raw_write_seqcount_begin();
    	raw_write_seqcount_end();
    
    But avoids issueing two back-to-back smp_wmb() instructions.
    
    This construct works because the read side will 'stall' when observing
    odd values. This means that -- referring to the example in the comment
    below -- even though there is no (matching) read barrier between the
    loads of X and Y, we cannot observe !x && !y, because:
    
     - if we observe Y == false we must observe the first sequence
       increment, which makes us loop, until
    
     - we observe !(seq & 1) -- the second sequence increment -- at which
       time we must also observe T == true.
    Suggested-by: NOleg Nesterov <oleg@redhat.com>
    Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: umgwanakikbuti@gmail.com
    Cc: ktkhai@parallels.com
    Cc: rostedt@goodmis.org
    Cc: juri.lelli@gmail.com
    Cc: pang.xunlei@linaro.org
    Cc: oleg@redhat.com
    Cc: wanpeng.li@linux.intel.com
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Link: http://lkml.kernel.org/r/20150617122924.GP3644@twins.programming.kicks-ass.netSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
    c4bfa3f5
seqlock.h 13.3 KB