Root/
1 | Percpu rw semaphores |
2 | -------------------- |
3 | |
4 | Percpu rw semaphores is a new read-write semaphore design that is |
5 | optimized for locking for reading. |
6 | |
7 | The problem with traditional read-write semaphores is that when multiple |
8 | cores take the lock for reading, the cache line containing the semaphore |
9 | is bouncing between L1 caches of the cores, causing performance |
10 | degradation. |
11 | |
12 | Locking for reading is very fast, it uses RCU and it avoids any atomic |
13 | instruction in the lock and unlock path. On the other hand, locking for |
14 | writing is very expensive, it calls synchronize_rcu() that can take |
15 | hundreds of milliseconds. |
16 | |
17 | The lock is declared with "struct percpu_rw_semaphore" type. |
18 | The lock is initialized percpu_init_rwsem, it returns 0 on success and |
19 | -ENOMEM on allocation failure. |
20 | The lock must be freed with percpu_free_rwsem to avoid memory leak. |
21 | |
22 | The lock is locked for read with percpu_down_read, percpu_up_read and |
23 | for write with percpu_down_write, percpu_up_write. |
24 | |
25 | The idea of using RCU for optimized rw-lock was introduced by |
26 | Eric Dumazet <eric.dumazet@gmail.com>. |
27 | The code was written by Mikulas Patocka <mpatocka@redhat.com> |
28 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9