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