Lines Matching refs:po
15 7. THE PROGRAM ORDER RELATION: po AND po-loc
327 THE PROGRAM ORDER RELATION: po AND po-loc
330 The most important relation between events is program order (po). You
335 that X is po-before Y (written as "X ->po Y" in formulas) if X occurs
339 on different CPUs are never linked by po. Also, it is by definition
342 po-loc is a sub-relation of po. It links two memory accesses when the
484 have R ->po X. It wouldn't make sense for a computation to depend
583 Write-write coherence: If W ->po-loc W' (i.e., W comes before
587 Write-read coherence: If W ->po-loc R, where W is a store and R
591 Read-write coherence: If R ->po-loc W, where R is a load and W
595 Read-read coherence: If R ->po-loc R', where R and R' are two
670 Just like the po relation, co is inherently an ordering -- it is not
678 related by po. Coherence order is strictly per-location, or if you
748 uses the value of the po-latest such store as the value obtained by R,
781 the CPU to execute all po-earlier instructions before any
782 po-later instructions;
784 smp_rmb() forces the CPU to execute all po-earlier loads
785 before any po-later loads;
787 smp_wmb() forces the CPU to execute all po-earlier stores
788 before any po-later stores;
792 part of an smp_load_acquire()) before any po-later
796 execute all po-earlier instructions before the store
803 For each other CPU C', smp_wmb() forces all po-earlier stores
804 on C to propagate to C' before any po-later stores do.
807 a release fence is executed (including all po-earlier
812 executed (including all po-earlier stores on C) is forced to
813 propagate to all other CPUs before any instructions po-after
900 and po-loc relations agree with this global ordering; in other words,
901 whenever we have X ->rf Y or X ->co Y or X ->fr Y or X ->po-loc Y, the
909 where each of the links is either rf, co, fr, or po-loc. This has to
960 "preserved program order") relation, which links the po-earlier
961 instruction to the po-later instruction and is thus a sub-relation of
962 po.
966 memory accesses with X ->po Y; then the CPU must execute X before Y if
1019 store and a second, po-later load reads from that store:
1048 R ->po-loc W
1050 (the po-loc link says that R comes before W in program order and they
1056 W ->po-loc W'
1124 po-later instructions until after the local cache has finished
1146 the CPU to execute any po-later instructions (or po-later loads in the
1149 wait for all of its po-earlier stores to propagate to every other CPU
1507 E ->rcu-link F includes cases where E is po-before some memory-access
1508 event X, F is po-after some memory-access event Y, and we have any of
1558 that any write po-before E will propagate to every CPU before any
1559 instruction po-after F can execute. (However, it does not imply that
1571 1. G = W is po-before or equal to X;
1575 2. Y is po-before Z;
1586 executing and hence before any instruction po-after F can execute.
1617 are events Q and R where Q is po-after L (which marks the start of the
1619 relation, and R is po-before the grace period S. Thus we have:
1627 some event X which is po-after S. Symbolically, this amounts to:
1629 S ->po X ->hb* Z ->fr W ->rf Y ->po U.
1672 P1's load at W reads from, so we have W ->fre Y. Since S ->po W and
1673 also Y ->po U, we get S ->rcu-link U. In addition, S ->rcu-gp S
1677 so we have X ->rfe Z. Together with L ->po X and Z ->po S, this
1796 requires that every instruction po-before the lock-release must
1797 execute before any instruction po-after the lock-acquire. This would
1855 stores W and W' occur po-before the lock-release and po-after the
1951 all po-earlier events against all po-later events, as smp_mb() does,
1954 smp_mb__before_atomic() orders all po-earlier events against
1955 po-later atomic updates and the events following them;
1957 smp_mb__after_atomic() orders po-earlier atomic updates and
1958 the events preceding them against all po-later events;
1960 smp_mb_after_spinlock() orders po-earlier lock acquisition
1961 events and the events preceding them against all po-later