-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathtodo.txt
39 lines (30 loc) · 1.1 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
More litmus tests:
o Combined control dependency and f[rmb].
o Writes following a control dependency that are unconditionally
reached. (Will Deacon and 32-bit ARM conditional move instruction.)
o C11 release sequences.
o Release-acquire pair short-circuiting a series of RCU read-side
critical sections.
> Locally transitive:
>
> > o smp_store_release() -> smp_load_acquire() (locally transitive)
>
> Locally transitive chain termination:
>
> (i.e. these can't be used to extend a chain)
Agreed.
> > o smp_store_release() -> lockless_dereference() (???)
> > o rcu_assign_pointer() -> rcu_dereference()
> > o smp_store_release() -> READ_ONCE(); if
I am OK with the first and last, but I believe that the middle one
has real use cases. So the rcu_assign_pointer() -> rcu_dereference()
case needs to be locally transitive.
> Globally transitive:
>
> > o smp_mb(); WRITE_ONCE() -> READ_ONCE(); (globally transitive)
> > o synchronize_rcu(); WRITE_ONCE() -> READ_ONCE(); (globally transitive)
>
> RCU:
>
> > o synchronize_rcu(); WRITE_ONCE() -> rcu_read_lock(); READ_ONCE()
> > (strange and wonderful properties)