| 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 |