This commit keeps only the historical and low-level discussion of
smp_read_barrier_depends().

Signed-off-by: Paul E. McKenney <[email protected]>
---
 Documentation/RCU/Design/Requirements/Requirements.html | 3 ++-
 Documentation/RCU/rcu_dereference.txt                   | 6 +-----
 Documentation/RCU/whatisRCU.txt                         | 3 +--
 Documentation/circular-buffers.txt                      | 3 +--
 Documentation/memory-barriers.txt                       | 7 ++++---
 5 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/Documentation/RCU/Design/Requirements/Requirements.html 
b/Documentation/RCU/Design/Requirements/Requirements.html
index 62e847bcdcdd..571c3d75510f 100644
--- a/Documentation/RCU/Design/Requirements/Requirements.html
+++ b/Documentation/RCU/Design/Requirements/Requirements.html
@@ -581,7 +581,8 @@ This guarantee was only partially premeditated.
 DYNIX/ptx used an explicit memory barrier for publication, but had nothing
 resembling <tt>rcu_dereference()</tt> for subscription, nor did it
 have anything resembling the <tt>smp_read_barrier_depends()</tt>
-that was later subsumed into <tt>rcu_dereference()</tt>.
+that was later subsumed into <tt>rcu_dereference()</tt> and later
+still into <tt>READ_ONCE()</tt>.
 The need for these operations made itself known quite suddenly at a
 late-1990s meeting with the DEC Alpha architects, back in the days when
 DEC was still a free-standing company.
diff --git a/Documentation/RCU/rcu_dereference.txt 
b/Documentation/RCU/rcu_dereference.txt
index 1acb26b09b48..ab96227bad42 100644
--- a/Documentation/RCU/rcu_dereference.txt
+++ b/Documentation/RCU/rcu_dereference.txt
@@ -122,11 +122,7 @@ o  Be very careful about comparing pointers obtained from
                Note that if checks for being within an RCU read-side
                critical section are not required and the pointer is never
                dereferenced, rcu_access_pointer() should be used in place
-               of rcu_dereference(). The rcu_access_pointer() primitive
-               does not require an enclosing read-side critical section,
-               and also omits the smp_read_barrier_depends() included in
-               rcu_dereference(), which in turn should provide a small
-               performance gain in some CPUs (e.g., the DEC Alpha).
+               of rcu_dereference().
 
        o       The comparison is against a pointer that references memory
                that was initialized "a long time ago."  The reason
diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt
index df62466da4e0..a27fbfb0efb8 100644
--- a/Documentation/RCU/whatisRCU.txt
+++ b/Documentation/RCU/whatisRCU.txt
@@ -600,8 +600,7 @@ don't forget about them when submitting patches making use 
of RCU!]
 
        #define rcu_dereference(p) \
        ({ \
-               typeof(p) _________p1 = p; \
-               smp_read_barrier_depends(); \
+               typeof(p) _________p1 = READ_ONCE(p); \
                (_________p1); \
        })
 
diff --git a/Documentation/circular-buffers.txt 
b/Documentation/circular-buffers.txt
index d4628174b7c5..53e51caa3347 100644
--- a/Documentation/circular-buffers.txt
+++ b/Documentation/circular-buffers.txt
@@ -220,8 +220,7 @@ before it writes the new tail pointer, which will erase the 
item.
 
 Note the use of READ_ONCE() and smp_load_acquire() to read the
 opposition index.  This prevents the compiler from discarding and
-reloading its cached value - which some compilers will do across
-smp_read_barrier_depends().  This isn't strictly needed if you can
+reloading its cached value.  This isn't strictly needed if you can
 be sure that the opposition index will _only_ be used the once.
 The smp_load_acquire() additionally forces the CPU to order against
 subsequent memory references.  Similarly, smp_store_release() is used
diff --git a/Documentation/memory-barriers.txt 
b/Documentation/memory-barriers.txt
index 2269e58fa073..c21a9b25cacf 100644
--- a/Documentation/memory-barriers.txt
+++ b/Documentation/memory-barriers.txt
@@ -236,9 +236,10 @@ There are some minimal guarantees that may be expected of 
a CPU:
      and always in that order.  On most systems, smp_read_barrier_depends()
      does nothing, but it is required for DEC Alpha, and is supplied by
      READ_ONCE().  The READ_ONCE() is also required to prevent compiler
-     mischief.  Please note that you should normally use something
+     mischief.  Please note that you should almost always use something
      like READ_ONCE() or rcu_dereference() instead of open-coding
-     smp_read_barrier_depends().
+     smp_read_barrier_depends(), the only exceptions being in DEC Alpha
+     architecture-specific code and in ACCESS_ONCE itself.
 
  (*) Overlapping loads and stores within a particular CPU will appear to be
      ordered within that CPU.  This means that for:
@@ -1816,7 +1817,7 @@ The Linux kernel has eight basic CPU memory barriers:
        GENERAL         mb()                    smp_mb()
        WRITE           wmb()                   smp_wmb()
        READ            rmb()                   smp_rmb()
-       DATA DEPENDENCY read_barrier_depends()  smp_read_barrier_depends()
+       DATA DEPENDENCY                         READ_ONCE()
 
 
 All memory barriers except the data dependency barriers imply a compiler
-- 
2.5.2

Reply via email to