6 * This litmus test demonstrates more than just locking is required to
7 * correctly implement double-checked locking.
15 P0(int *flag, int *data, spinlock_t *lck)
21 r0 = READ_ONCE(*flag);
24 r1 = READ_ONCE(*flag);
31 r2 = READ_ONCE(*data);
34 P1(int *flag, int *data, spinlock_t *lck)
40 r0 = READ_ONCE(*flag);
43 r1 = READ_ONCE(*flag);
50 r2 = READ_ONCE(*data);
53 locations [flag;data;0:r0;0:r1;1:r0;1:r1]
54 exists (0:r2=0 \/ 1:r2=0)