cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fetch_add_unless (552B)


      1cat << EOF
      2/**
      3 * arch_${atomic}_fetch_add_unless - add unless the number is already a given value
      4 * @v: pointer of type ${atomic}_t
      5 * @a: the amount to add to v...
      6 * @u: ...unless v is equal to u.
      7 *
      8 * Atomically adds @a to @v, so long as @v was not already @u.
      9 * Returns original value of @v
     10 */
     11static __always_inline ${int}
     12arch_${atomic}_fetch_add_unless(${atomic}_t *v, ${int} a, ${int} u)
     13{
     14	${int} c = arch_${atomic}_read(v);
     15
     16	do {
     17		if (unlikely(c == u))
     18			break;
     19	} while (!arch_${atomic}_try_cmpxchg(v, &c, c + a));
     20
     21	return c;
     22}
     23EOF