[lkml]   [2007]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 1/23] document preferred use of volatile with atomic_t
    From: Chris Snook <>

    Document proper use of volatile for atomic_t operations.

    Signed-off-by: Chris Snook <>

    --- linux-2.6.23-rc3-orig/Documentation/atomic_ops.txt 2007-07-08 19:32:17.000000000 -0400
    +++ linux-2.6.23-rc3/Documentation/atomic_ops.txt 2007-08-13 03:36:43.000000000 -0400
    @@ -12,13 +12,20 @@
    C integer type will fail. Something like the following should

    - typedef struct { volatile int counter; } atomic_t;
    + typedef struct { int counter; } atomic_t;
    + Historically, counter has been declared as a volatile int. This
    +is now discouraged in favor of explicitly casting it as volatile where
    +volatile behavior is required. Most architectures will only require such
    +a cast in atomic_read() and atomic_set(), as well as their 64-bit versions
    +if applicable, since the more complex atomic operations directly or
    +indirectly use assembly that results in volatile behavior.

    The first operations to implement for atomic_t's are the
    initializers and plain reads.

    #define ATOMIC_INIT(i) { (i) }
    - #define atomic_set(v, i) ((v)->counter = (i))
    + #define atomic_set(v, i) (*(volatile int *)&(v)->counter = (i))

    The first macro is used in definitions, such as:

    @@ -38,7 +45,7 @@

    Next, we have:

    - #define atomic_read(v) ((v)->counter)
    + #define atomic_read(v) (*(volatile int *)&(v)->counter)

    which simply reads the current value of the counter.

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at
     \ /
      Last update: 2007-08-13 16:09    [W:0.022 / U:43.188 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site