From: Chris Snook <csnook@redhat.com>
To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
torvalds@linux-foundation.org
Cc: netdev@vger.kernel.org, akpm@linux-foundation.org, ak@suse.de,
heiko.carstens@de.ibm.com, davem@davemloft.net,
schwidefsky@de.ibm.com, wensong@linux-vs.org, horms@verge.net.au,
wjiang@resilience.com, cfriesen@nortel.com, zlynx@acm.org,
rpjday@mindspring.com, jesper.juhl@gmail.com
Subject: [PATCH 24/24] document volatile atomic_read() behavior
Date: Thu, 9 Aug 2007 10:24:30 -0400 [thread overview]
Message-ID: <20070809142430.GA19817@shell.boston.redhat.com> (raw)
From: Chris Snook <csnook@redhat.com>
Update atomic_ops.txt to reflect the newly consistent behavior of
atomic_read(), and to note that volatile (in declarations) is now
considered harmful.
Signed-off-by: Chris Snook <csnook@redhat.com>
--- linux-2.6.23-rc2-orig/Documentation/atomic_ops.txt 2007-07-08 19:32:17.000000000 -0400
+++ linux-2.6.23-rc2/Documentation/atomic_ops.txt 2007-08-09 08:24:32.000000000 -0400
@@ -12,7 +12,7 @@
C integer type will fail. Something like the following should
suffice:
- typedef struct { volatile int counter; } atomic_t;
+ typedef struct { int counter; } atomic_t;
The first operations to implement for atomic_t's are the
initializers and plain reads.
@@ -38,9 +38,17 @@
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.
+which reads the counter as though it were volatile. This prevents the
+compiler from optimizing away repeated atomic_read() invocations without
+requiring a more expensive barrier(). Historically this has been
+accomplished by declaring the counter itself to be volatile, but the
+ambiguity of the C standard on the semantics of volatile make this practice
+vulnerable to overly creative interpretation by compilers. Explicit
+casting in atomic_read() ensures consistent behavior across architectures
+and compilers. Even with this convenience in atomic_read(), busy-waiters
+should call cpu_relax().
Now, we move onto the actual atomic operation interfaces.
next reply other threads:[~2007-08-09 14:25 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-09 14:24 Chris Snook [this message]
2007-08-09 15:59 ` [PATCH 24/24] document volatile atomic_read() behavior Segher Boessenkool
2007-08-09 16:26 ` Chris Snook
2007-08-09 19:42 ` Segher Boessenkool
2007-08-09 20:05 ` Chris Snook
2007-08-09 22:34 ` Segher Boessenkool
2007-08-09 20:10 ` Chris Friesen
2007-08-09 22:23 ` Segher Boessenkool
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070809142430.GA19817@shell.boston.redhat.com \
--to=csnook@redhat.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=cfriesen@nortel.com \
--cc=davem@davemloft.net \
--cc=heiko.carstens@de.ibm.com \
--cc=horms@verge.net.au \
--cc=jesper.juhl@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rpjday@mindspring.com \
--cc=schwidefsky@de.ibm.com \
--cc=torvalds@linux-foundation.org \
--cc=wensong@linux-vs.org \
--cc=wjiang@resilience.com \
--cc=zlynx@acm.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.