• Mark Rutland's avatar
    locking/atomic: scripts: Clarify ordering of conditional atomics · 6dfee110
    Mark Rutland authored
    Conditional atomic operations (e.g. cmpxchg()) only provide ordering
    when the condition holds; when the condition does not hold, the location
    is not modified and relaxed ordering is provided. Where ordering is
    needed for failed conditional atomics, it is necessary to use
    smp_mb__before_atomic() and/or smp_mb__after_atomic().
    
    This is explained tersely in memory-barriers.txt, and is implied but not
    explicitly stated in the kerneldoc comments for the conditional
    operations. The lack of an explicit statement has lead to some off-list
    queries about the ordering semantics of failing conditional operations,
    so evidently this is confusing.
    
    Update the kerneldoc comments to explicitly describe the lack of ordering
    for failed conditional atomic operations.
    
    For most conditional atomic operations, this is written as:
    
      | If (${condition}), atomically updates @v to (${new}) with ${desc_order} ordering.
      | Otherwise, @v is not modified and relaxed ordering is provided.
    
    For the try_cmpxchg() operations, this is written as:
    
      | If (${condition}), atomically updates @v to @new with ${desc_order} ordering.
      | Otherwise, @v is not modified, @old is updated to the current value of @v,
      | and relaxed ordering is provided.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Reviewed-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    Reviewed-by: default avatarNhat Pham <nphamcs@gmail.com>
    Link: https://lore.kernel.org/r/20240209124010.2096198-1-mark.rutland@arm.com
    6dfee110
add_unless 486 Bytes