Commit-ID: a5052657c164107032d521f0d9e92703d78845f2 Gitweb: http://git.kernel.org/tip/a5052657c164107032d521f0d9e92703d78845f2 Author: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> AuthorDate: Tue, 12 Apr 2016 08:52:49 -0700 Committer: Ingo Molnar <mingo@xxxxxxxxxx> CommitDate: Wed, 13 Apr 2016 08:52:21 +0200 locking/Documentation: Clarify relationship of barrier() to control dependencies The current documentation claims that the compiler ignores barrier(), which is not the case. Instead, the compiler carefully pays attention to barrier(), but in a creative way that still manages to destroy the control dependency. This commit sets the story straight. Reported-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: bobby.prani@xxxxxxxxx Cc: dhowells@xxxxxxxxxx Cc: dipankar@xxxxxxxxxx Cc: dvhart@xxxxxxxxxxxxxxx Cc: edumazet@xxxxxxxxxx Cc: fweisbec@xxxxxxxxx Cc: jiangshanlai@xxxxxxxxx Cc: josh@xxxxxxxxxxxxxxxx Cc: oleg@xxxxxxxxxx Cc: rostedt@xxxxxxxxxxx Link: http://lkml.kernel.org/r/1460476375-27803-1-git-send-email-paulmck@xxxxxxxxxxxxxxxxxx Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> --- Documentation/memory-barriers.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt index 3729cbe..ec12890 100644 --- a/Documentation/memory-barriers.txt +++ b/Documentation/memory-barriers.txt @@ -813,9 +813,10 @@ In summary: the same variable, then those stores must be ordered, either by preceding both of them with smp_mb() or by using smp_store_release() to carry out the stores. Please note that it is -not- sufficient - to use barrier() at beginning of each leg of the "if" statement, - as optimizing compilers do not necessarily respect barrier() - in this case. + to use barrier() at beginning of each leg of the "if" statement + because, as shown by the example above, optimizing compilers can + destroy the control dependency while respecting the letter of the + barrier() law. (*) Control dependencies require at least one run-time conditional between the prior load and the subsequent store, and this -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |