projects
/
ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ust: generate traces readable in lttv
[ust.git]
/
share
/
kernelcompat.h
diff --git
a/share/kernelcompat.h
b/share/kernelcompat.h
index e322bdbaad8c504e7e679e09afaf6a0432adb914..ee676deb570cf9a1fde6a5b3051f95d6fdcc3b3b 100644
(file)
--- a/
share/kernelcompat.h
+++ b/
share/kernelcompat.h
@@
-159,25
+159,25
@@
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
unsigned long prev;
switch (size) {
case 1:
unsigned long prev;
switch (size) {
case 1:
- asm volatile("lock cmpxchgb %b1,%2"
+ asm volatile("lock
;
cmpxchgb %b1,%2"
: "=a"(prev)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 2:
: "=a"(prev)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 2:
- asm volatile("lock cmpxchgw %w1,%2"
+ asm volatile("lock
;
cmpxchgw %w1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 4:
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 4:
- asm volatile("lock cmpxchgl %k1,%2"
+ asm volatile("lock
;
cmpxchgl %k1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 8:
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 8:
- asm volatile("lock cmpxchgq %1,%2"
+ asm volatile("lock
;
cmpxchgq %1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
@@
-186,37
+186,44
@@
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
return old;
}
return old;
}
-#define local_cmpxchg cmpxchg
+//#define local_cmpxchg cmpxchg
+#define local_cmpxchg(l, o, n) (cmpxchg(&((l)->a.counter), (o), (n)))
+
#define atomic_long_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new)))
/* LOCAL OPS */
#define atomic_long_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new)))
/* LOCAL OPS */
-typedef int local_t;
+//typedef int local_t;
+typedef struct
+{
+ atomic_long_t a;
+} local_t;
+
-static inline void local_inc(local_t *
a
)
+static inline void local_inc(local_t *
l
)
{
{
- (
*a
)++;
+ (
l->a.counter
)++;
}
}
-static inline void local_set(local_t *
a
, int v)
+static inline void local_set(local_t *
l
, int v)
{
{
-
*a
= v;
+
l->a.counter
= v;
}
}
-static inline void local_add(int v, local_t *
a
)
+static inline void local_add(int v, local_t *
l
)
{
{
-
*a
+= v;
+
l->a.counter
+= v;
}
}
-static int local_add_return(int v, local_t *
a
)
+static int local_add_return(int v, local_t *
l
)
{
{
- return
*a
+= v;
+ return
l->a.counter
+= v;
}
}
-static inline int local_read(local_t *
a
)
+static inline int local_read(local_t *
l
)
{
{
- return
*a
;
+ return
l->a.counter
;
}
}
This page took
0.024475 seconds
and
4
git commands to generate.