Messages in this thread | | | Date | Tue, 24 Jan 2023 06:54:23 -0800 | From | "Paul E. McKenney" <> | Subject | Re: Internal vs. external barriers (was: Re: Interesting LKMM litmus test) |
| |
On Tue, Jan 24, 2023 at 12:09:48PM +0100, Andrea Parri wrote: > > There is the one below, but I am (1) not sure that I have it right, > > (2) not immediately certain that the Linux-kernel implementation would > > forbid it, (3) not immediately sure that it should be forbidden. > > > > In the meantime, thoughts? > > As it stands, P0 to completion, then P1 to completion, then P2 to > completion should meet the "exists" clause; I guess we want "x=1" > in the clause (or the values of the stores to "x" exchanged).
OK, so I still don't have it right. ;-)
Make that x=1. I think.
Thanx, Paul
> Andrea > > > > ------------------------------------------------------------------------ > > > > C C-srcu-observed-3 > > > > (* > > * Result: Sometimes > > *) > > > > {} > > > > P0(int *x, int *y, int *z, struct srcu_struct *s) > > { > > int r1; > > > > r1 = srcu_read_lock(s); > > WRITE_ONCE(*y, 1); > > WRITE_ONCE(*x, 1); > > srcu_read_unlock(s, r1); > > } > > > > P1(int *x, int *y, int *z, struct srcu_struct *s) > > { > > int r1; > > > > r1 = READ_ONCE(*y); > > synchronize_srcu(s); > > WRITE_ONCE(*z, 1); > > } > > > > P2(int *x, int *y, int *z, struct srcu_struct *s) > > { > > WRITE_ONCE(*z, 2); > > smp_mb(); > > WRITE_ONCE(*x, 2); > > } > > > > exists (1:r1=1 /\ x=2 /\ z=2)
| |