diff options
author | Nick Piggin <npiggin@suse.de> | 2008-05-14 00:35:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-14 13:05:18 -0400 |
commit | 73f10281ea96d7e8b4fc1c5d755a7c8eb484155b (patch) | |
tree | d75ab7ba0f571ce0c08d30a04f1da7c781b02092 /Documentation/memory-barriers.txt | |
parent | 4ef7e3e90f56c74b2a17e12d49ed35c3767d66c2 (diff) |
read_barrier_depends arch fixlets
read_barrie_depends has always been a noop (not a compiler barrier) on all
architectures except SMP alpha. This brings UP alpha and frv into line with all
other architectures, and fixes incorrect documentation.
Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/memory-barriers.txt')
-rw-r--r-- | Documentation/memory-barriers.txt | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt index e5a819a4f0c..f5b7127f54a 100644 --- a/Documentation/memory-barriers.txt +++ b/Documentation/memory-barriers.txt | |||
@@ -994,7 +994,17 @@ The Linux kernel has eight basic CPU memory barriers: | |||
994 | DATA DEPENDENCY read_barrier_depends() smp_read_barrier_depends() | 994 | DATA DEPENDENCY read_barrier_depends() smp_read_barrier_depends() |
995 | 995 | ||
996 | 996 | ||
997 | All CPU memory barriers unconditionally imply compiler barriers. | 997 | All memory barriers except the data dependency barriers imply a compiler |
998 | barrier. Data dependencies do not impose any additional compiler ordering. | ||
999 | |||
1000 | Aside: In the case of data dependencies, the compiler would be expected to | ||
1001 | issue the loads in the correct order (eg. `a[b]` would have to load the value | ||
1002 | of b before loading a[b]), however there is no guarantee in the C specification | ||
1003 | that the compiler may not speculate the value of b (eg. is equal to 1) and load | ||
1004 | a before b (eg. tmp = a[1]; if (b != 1) tmp = a[b]; ). There is also the | ||
1005 | problem of a compiler reloading b after having loaded a[b], thus having a newer | ||
1006 | copy of b than a[b]. A consensus has not yet been reached about these problems, | ||
1007 | however the ACCESS_ONCE macro is a good place to start looking. | ||
998 | 1008 | ||
999 | SMP memory barriers are reduced to compiler barriers on uniprocessor compiled | 1009 | SMP memory barriers are reduced to compiler barriers on uniprocessor compiled |
1000 | systems because it is assumed that a CPU will appear to be self-consistent, | 1010 | systems because it is assumed that a CPU will appear to be self-consistent, |