Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=02c608c1fefe821a4c6fc34c45a0dea3cebf4764
Commit:     02c608c1fefe821a4c6fc34c45a0dea3cebf4764
Parent:     2dda81ca31dc73e695ff8b83351f7aaefbef192a
Author:     Oleg Nesterov <[EMAIL PROTECTED]>
AuthorDate: Sun Feb 24 00:03:29 2008 +0300
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sat Feb 23 17:52:36 2008 -0800

    documentation: atomic_add_unless() doesn't imply mb() on failure
    
    (sorry for being offtpoic, but while experts are here...)
    
    A "typical" implementation of atomic_add_unless() can return 0 immediately
    after the first atomic_read() (before doing cmpxchg). In that case it 
doesn't
    provide any barrier semantics. See include/asm-ia64/atomic.h as an example.
    
    We should either change the implementation, or fix the docs.
    
    Signed-off-by: Oleg Nesterov <[EMAIL PROTECTED]>
    Acked-by: Nick Piggin <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 Documentation/atomic_ops.txt      |    3 ++-
 Documentation/memory-barriers.txt |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Documentation/atomic_ops.txt b/Documentation/atomic_ops.txt
index f20c10c..4ef2450 100644
--- a/Documentation/atomic_ops.txt
+++ b/Documentation/atomic_ops.txt
@@ -186,7 +186,8 @@ If the atomic value v is not equal to u, this function adds 
a to v, and
 returns non zero. If v is equal to u then it returns zero. This is done as
 an atomic operation.
 
-atomic_add_unless requires explicit memory barriers around the operation.
+atomic_add_unless requires explicit memory barriers around the operation
+unless it fails (returns 0).
 
 atomic_inc_not_zero, equivalent to atomic_add_unless(v, 1, 0)
 
diff --git a/Documentation/memory-barriers.txt 
b/Documentation/memory-barriers.txt
index 4e17beb..1f506f7 100644
--- a/Documentation/memory-barriers.txt
+++ b/Documentation/memory-barriers.txt
@@ -1493,7 +1493,7 @@ explicit lock operations, described later).  These 
include:
        atomic_dec_and_test();
        atomic_sub_and_test();
        atomic_add_negative();
-       atomic_add_unless();
+       atomic_add_unless();    /* when succeeds (returns 1) */
        test_and_set_bit();
        test_and_clear_bit();
        test_and_change_bit();
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to