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