mirror of
https://github.com/torvalds/linux.git
synced 2025-11-04 18:49:34 +02:00
doc: Update control-dependencies section of memory-barriers.txt
In the following example, if MAX is defined to be 1, then the compiler
knows (Q % MAX) is equal to zero. The compiler can therefore throw
away the "then" branch (and the "if"), retaining only the "else" branch.
q = READ_ONCE(a);
if (q % MAX) {
WRITE_ONCE(b, 1);
do_something();
} else {
WRITE_ONCE(b, 2);
do_something_else();
}
It is therefore necessary to modify the example like this:
q = READ_ONCE(a);
- WRITE_ONCE(b, 1);
+ WRITE_ONCE(b, 2);
do_something_else();
Signed-off-by: pierre Kuo <vichy.kuo@gmail.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
d3d3a3ccc4
commit
b26cfc48e3
1 changed files with 1 additions and 1 deletions
|
|
@ -768,7 +768,7 @@ equal to zero, in which case the compiler is within its rights to
|
||||||
transform the above code into the following:
|
transform the above code into the following:
|
||||||
|
|
||||||
q = READ_ONCE(a);
|
q = READ_ONCE(a);
|
||||||
WRITE_ONCE(b, 1);
|
WRITE_ONCE(b, 2);
|
||||||
do_something_else();
|
do_something_else();
|
||||||
|
|
||||||
Given this transformation, the CPU is not required to respect the ordering
|
Given this transformation, the CPU is not required to respect the ordering
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue