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