1
2
3
4
5
6
7
8
9
10
11
12
13
14
| cat <<EOF
| static __always_inline bool
| ${arch}${atomic}_dec_unless_positive(${atomic}_t *v)
| {
| ${int} c = ${arch}${atomic}_read(v);
|
| do {
| if (unlikely(c > 0))
| return false;
| } while (!${arch}${atomic}_try_cmpxchg(v, &c, c - 1));
|
| return true;
| }
| EOF
|
|