projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
s390: uatomic add missing xchg return
[urcu.git]
/
urcu
/
uatomic_arch_s390.h
diff --git
a/urcu/uatomic_arch_s390.h
b/urcu/uatomic_arch_s390.h
index b67259ec082c7d26ac947ec6087c5f98e12963a4..a8c8706e7b10c372ffe065394772b3c5089edbcb 100644
(file)
--- a/
urcu/uatomic_arch_s390.h
+++ b/
urcu/uatomic_arch_s390.h
@@
-48,6
+48,8
@@
#define uatomic_read(addr) LOAD_SHARED(*(addr))
/* xchg */
#define uatomic_read(addr) LOAD_SHARED(*(addr))
/* xchg */
+
+static inline __attribute__((always_inline))
unsigned long _uatomic_exchange(volatile void *addr, unsigned long val, int len)
{
switch (len) {
unsigned long _uatomic_exchange(volatile void *addr, unsigned long val, int len)
{
switch (len) {
@@
-61,6
+63,7
@@
unsigned long _uatomic_exchange(volatile void *addr, unsigned long val, int len)
: "=&r"(old_val), "=m" (*addr)
: "r"(val), "m" (*addr)
: "memory", "cc");
: "=&r"(old_val), "=m" (*addr)
: "r"(val), "m" (*addr)
: "memory", "cc");
+ return old_val;
}
#if (BITS_PER_LONG == 64)
case 8:
}
#if (BITS_PER_LONG == 64)
case 8:
@@
-73,6
+76,7
@@
unsigned long _uatomic_exchange(volatile void *addr, unsigned long val, int len)
: "=&r"(old_val), "=m" (*addr)
: "r"(val), "m" (*addr)
: "memory", "cc");
: "=&r"(old_val), "=m" (*addr)
: "r"(val), "m" (*addr)
: "memory", "cc");
+ return old_val;
}
#endif
default:
}
#endif
default:
@@
-90,7
+94,7
@@
unsigned long _uatomic_exchange(volatile void *addr, unsigned long val, int len)
static inline __attribute__((always_inline))
unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
static inline __attribute__((always_inline))
unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
- unsigned long new, int len)
+ unsigned long
_
new, int len)
{
switch (len) {
case 4:
{
switch (len) {
case 4:
@@
-100,18
+104,20
@@
unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
__asm__ __volatile__(
" cs %0,%2,%1\n"
: "+r"(old_val), "+m"(*addr)
__asm__ __volatile__(
" cs %0,%2,%1\n"
: "+r"(old_val), "+m"(*addr)
- : "r"(new)
+ : "r"(
_
new)
: "memory", "cc");
return old_val;
}
#if (BITS_PER_LONG == 64)
case 8:
: "memory", "cc");
return old_val;
}
#if (BITS_PER_LONG == 64)
case 8:
+ {
__asm__ __volatile__(
" csg %0,%2,%1\n"
: "+r"(old), "+m"(*addr)
__asm__ __volatile__(
" csg %0,%2,%1\n"
: "+r"(old), "+m"(*addr)
- : "r"(new)
+ : "r"(
_
new)
: "memory", "cc");
return old;
: "memory", "cc");
return old;
+ }
#endif
default:
__asm__ __volatile__(".long 0xd00d00");
#endif
default:
__asm__ __volatile__(".long 0xd00d00");
@@
-120,10
+126,10
@@
unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
return 0;
}
return 0;
}
-#define uatomic_cmpxchg(addr, old,
new)
\
+#define uatomic_cmpxchg(addr, old,
_new)
\
(__typeof__(*(addr))) _uatomic_cmpxchg((addr), \
(unsigned long)(old), \
(__typeof__(*(addr))) _uatomic_cmpxchg((addr), \
(unsigned long)(old), \
- (unsigned long)(
new),
\
+ (unsigned long)(
_new),
\
sizeof(*(addr)))
/* uatomic_add_return */
sizeof(*(addr)))
/* uatomic_add_return */
This page took
0.027354 seconds
and
4
git commands to generate.