• Nick Piggin's avatar
    i386: remove bogus comment about memory barrier · 4827bbb0
    Nick Piggin authored
    The comment being removed by this patch is incorrect and misleading.
    
    In the following situation:
    
    	1. load  ...
    	2. store 1 -> X
    	3. wmb
    	4. rmb
    	5. load  a <- Y
    	6. store ...
    
    4 will only ensure ordering of 1 with 5.
    3 will only ensure ordering of 2 with 6.
    
    Further, a CPU with strictly in-order stores will still only provide that
    2 and 6 are ordered (effectively, it is the same as a weakly ordered CPU
    with wmb after every store).
    
    In all cases, 5 may still be executed before 2 is visible to other CPUs!
    
    The additional piece of the puzzle that mb() provides is the store/load
    ordering, which fundamentally cannot be achieved with any combination of
    rmb()s and wmb()s.
    
    This can be an unexpected result if one expected any sort of global ordering
    guarantee to barriers (eg. that the barriers themselves are sequentially
    consistent with other types of barriers).  However sfence or lfence barriers
    need only provide an ordering partial ordering of memory operations -- Consider
    that wmb may be implemented as nothing more than inserting a special barrier
    entry in the store queue, or, in the case of x86, it can be a noop as the store
    queue is in order. And an rmb may be implemented as a directive to prevent
    subsequent loads only so long as their are no previous outstanding loads (while
    there could be stores still in store queues).
    
    I can actually see the occasional load/store being reordered around lfence on
    my core2. That doesn't prove my above assertions, but it does show the comment
    is wrong (unless my program is -- can send it out by request).
    
    So:
       mb() and smp_mb() always have and always will require a full mfence
       or lock prefixed instruction on x86.  And we should remove this comment.
    Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
    Cc: Paul McKenney <paulmck@us.ibm.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Andi Kleen <ak@suse.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4827bbb0
system.h 8.15 KB