Skip to content

Commit

Permalink
x86, perfcounters: add atomic64_xchg()
Browse files Browse the repository at this point in the history
Complete atomic64_t support on the 32-bit side by adding atomic64_xch().

Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20090406094518.445450972@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Ingo Molnar committed Apr 7, 2009
1 parent 6278af6 commit 98c2aaf
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions arch/x86/include/asm/atomic_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -291,19 +291,37 @@ atomic64_cmpxchg(atomic64_t *ptr, unsigned long long old_val,
}

/**
* atomic64_set - set atomic64 variable
* atomic64_xchg - xchg atomic64 variable
* @ptr: pointer to type atomic64_t
* @new_val: value to assign
* @old_val: old value that was there
*
* Atomically sets the value of @ptr to @new_val.
* Atomically xchgs the value of @ptr to @new_val and returns
* the old value.
*/
static inline void atomic64_set(atomic64_t *ptr, unsigned long long new_val)

static inline unsigned long long
atomic64_xchg(atomic64_t *ptr, unsigned long long new_val)
{
unsigned long long old_val;

do {
old_val = atomic_read(ptr);
} while (atomic64_cmpxchg(ptr, old_val, new_val) != old_val);

return old_val;
}

/**
* atomic64_set - set atomic64 variable
* @ptr: pointer to type atomic64_t
* @new_val: value to assign
*
* Atomically sets the value of @ptr to @new_val.
*/
static inline void atomic64_set(atomic64_t *ptr, unsigned long long new_val)
{
atomic64_xchg(ptr, new_val);
}

/**
Expand Down

0 comments on commit 98c2aaf

Please sign in to comment.