aboutsummaryrefslogtreecommitdiff
path: root/include/lock.h
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2017-12-20 13:16:22 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-12-20 22:15:36 -0600
commitca612b802adac0c72cd0f10c51a51275e5914101 (patch)
tree8a42ac046e4f368dace165e3c62b2f0644374dcf /include/lock.h
parentc7f2fab5c7854b11da909e79dd6c835d6ab91754 (diff)
downloadskiboot-ca612b802adac0c72cd0f10c51a51275e5914101.zip
skiboot-ca612b802adac0c72cd0f10c51a51275e5914101.tar.gz
skiboot-ca612b802adac0c72cd0f10c51a51275e5914101.tar.bz2
lock: Move cmpxchg() primitives to their own file
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'include/lock.h')
-rw-r--r--include/lock.h58
1 files changed, 1 insertions, 57 deletions
diff --git a/include/lock.h b/include/lock.h
index 4b0b29d..7bdfca2 100644
--- a/include/lock.h
+++ b/include/lock.h
@@ -19,6 +19,7 @@
#include <stdbool.h>
#include <processor.h>
+#include <cmpxchg.h>
struct lock {
/* Lock value has bit 63 as lock bit and the PIR of the owner
@@ -64,63 +65,6 @@ static inline void init_lock(struct lock *l)
*l = (struct lock)LOCK_UNLOCKED;
}
-#ifndef __TEST__
-/*
- * Bare cmpxchg, no barriers.
- */
-static inline uint32_t __cmpxchg32(uint32_t *mem, uint32_t old, uint32_t new)
-{
- uint32_t prev;
-
- asm volatile(
- "# __cmpxchg32 \n"
- "1: lwarx %0,0,%2 \n"
- " cmpw %0,%3 \n"
- " bne- 2f \n"
- " stwcx. %4,0,%2 \n"
- " bne- 1b \n"
- "2: \n"
-
- : "=&r"(prev), "+m"(*mem)
- : "r"(mem), "r"(old), "r"(new)
- : "cr0");
-
- return prev;
-}
-
-static inline uint64_t __cmpxchg64(uint64_t *mem, uint64_t old, uint64_t new)
-{
- uint64_t prev;
-
- asm volatile(
- "# __cmpxchg64 \n"
- "1: ldarx %0,0,%2 \n"
- " cmpd %0,%3 \n"
- " bne- 2f \n"
- " stdcx. %4,0,%2 \n"
- " bne- 1b \n"
- "2: \n"
-
- : "=&r"(prev), "+m"(*mem)
- : "r"(mem), "r"(old), "r"(new)
- : "cr0");
-
- return prev;
-}
-
-static inline uint32_t cmpxchg32(uint32_t *mem, uint32_t old, uint32_t new)
-{
- uint32_t prev;
-
- sync();
- prev = __cmpxchg32(mem, old,new);
- sync();
-
- return prev;
-}
-
-#endif /* __TEST_ */
-
extern bool try_lock(struct lock *l);
extern void lock(struct lock *l);
extern void unlock(struct lock *l);