1ace9bad4SMark Rutlandcat <<EOF 2765dcd20SMarco Elverstatic __always_inline ${ret} 3*9257959aSMark Rutlandraw_${atomic}_dec_if_positive(${atomic}_t *v) 4ace9bad4SMark Rutland{ 5*9257959aSMark Rutland ${int} dec, c = raw_${atomic}_read(v); 6ace9bad4SMark Rutland 7ace9bad4SMark Rutland do { 8ace9bad4SMark Rutland dec = c - 1; 9ace9bad4SMark Rutland if (unlikely(dec < 0)) 10ace9bad4SMark Rutland break; 11*9257959aSMark Rutland } while (!raw_${atomic}_try_cmpxchg(v, &c, dec)); 12ace9bad4SMark Rutland 13ace9bad4SMark Rutland return dec; 14ace9bad4SMark Rutland} 15ace9bad4SMark RutlandEOF 16