Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 96535
b: refs/heads/master
c: 73f1028
h: refs/heads/master
i:
  96533: 8d61e54
  96531: 76e9ecd
  96527: a375be3
v: v3
  • Loading branch information
Nick Piggin authored and Linus Torvalds committed May 14, 2008
1 parent 3961a09 commit 8c9cce0
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4ef7e3e90f56c74b2a17e12d49ed35c3767d66c2
refs/heads/master: 73f10281ea96d7e8b4fc1c5d755a7c8eb484155b
12 changes: 11 additions & 1 deletion trunk/Documentation/memory-barriers.txt
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,17 @@ The Linux kernel has eight basic CPU memory barriers:
DATA DEPENDENCY read_barrier_depends() smp_read_barrier_depends()


All CPU memory barriers unconditionally imply compiler barriers.
All memory barriers except the data dependency barriers imply a compiler
barrier. Data dependencies do not impose any additional compiler ordering.

Aside: In the case of data dependencies, the compiler would be expected to
issue the loads in the correct order (eg. `a[b]` would have to load the value
of b before loading a[b]), however there is no guarantee in the C specification
that the compiler may not speculate the value of b (eg. is equal to 1) and load
a before b (eg. tmp = a[1]; if (b != 1) tmp = a[b]; ). There is also the
problem of a compiler reloading b after having loaded a[b], thus having a newer
copy of b than a[b]. A consensus has not yet been reached about these problems,
however the ACCESS_ONCE macro is a good place to start looking.

SMP memory barriers are reduced to compiler barriers on uniprocessor compiled
systems because it is assumed that a CPU will appear to be self-consistent,
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-alpha/barrier.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ __asm__ __volatile__("mb": : :"memory")
#define smp_mb() barrier()
#define smp_rmb() barrier()
#define smp_wmb() barrier()
#define smp_read_barrier_depends() barrier()
#define smp_read_barrier_depends() do { } while (0)
#endif

#define set_mb(var, value) \
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-frv/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ do { \
#define mb() asm volatile ("membar" : : :"memory")
#define rmb() asm volatile ("membar" : : :"memory")
#define wmb() asm volatile ("membar" : : :"memory")
#define read_barrier_depends() barrier()
#define read_barrier_depends() do { } while (0)

#ifdef CONFIG_SMP
#define smp_mb() mb()
Expand Down

0 comments on commit 8c9cce0

Please sign in to comment.