• C
    s390/barrier: avoid serialization in [smp_]rmb and [smp_]wmb · 1afc82ae
    Christian Borntraeger 提交于
    The principles of operation says:
    
    The storage-operand fetch references of one instruction
    occur after those of all preceding instructions and
    before those of subsequent instructions, as observed
    by other CPUs and by channel programs.
    [...]
    The CPU may fetch the operands of instructions before the
    instructions are executed.
    [...]
    The CPU may delay placing results in storage.
    [...]
    the results of one instruction are placed in storage after
    the results of all preceding instructions have been placed
    in storage and before any results of the succeeding
    instructions are stored, as observed by other CPUs and by
    the channel subsystem.
    
    which boils down to:
    - reads are in order
    - writes are in order
    - reads can happen earlier
    - writes can happen later
    
    By definition (see memory-barrier.txt) read barriers orders
    reads vs reads and write barriers orders writes agains writes.
    but neither of these orders reads vs. writes.
    
    That means we can implement smp_wmb,smp_rmb,wmb and rmb as
    simple compiler barriers. To avoid reviewing all driver code
    for correct barrier usage we keep dma_[rw]mb as serialization
    for now.
    Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
    1afc82ae
barrier.h 1.3 KB