ust: collect many channels and start work on pipe listener
[ust.git] / share / kernelcompat.h
index e322bdbaad8c504e7e679e09afaf6a0432adb914..9139e75275ddf4c8c3e86d7d30c0916b32233b6d 100644 (file)
@@ -159,25 +159,25 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
        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:
-               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:
-               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:
-               asm volatile("lock cmpxchgq %1,%2"
+               asm volatile("lock; cmpxchgq %1,%2"
                             : "=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;
 }
 
-#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 */
 
-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;
 }
 
 
@@ -283,19 +290,39 @@ static __inline__ int get_count_order(unsigned int count)
 
 /* TRACE CLOCK */
 
+//ust// static inline u64 trace_clock_read64(void)
+//ust// {
+//ust//        uint32_t low;
+//ust//        uint32_t high;
+//ust//        uint64_t retval;
+//ust//        __asm__ volatile ("rdtsc\n" : "=a" (low), "=d" (high));
+//ust// 
+//ust//        retval = high;
+//ust//        retval <<= 32;
+//ust//        return retval | low;
+//ust// }
+
 static inline u64 trace_clock_read64(void)
 {
-       return 0LL;
+       struct timeval tv;
+       u64 retval;
+
+       gettimeofday(&tv, NULL);
+       retval = tv.tv_sec;
+       retval *= 1000000;
+       retval += tv.tv_usec;
+
+       return retval;
 }
 
-static inline unsigned int trace_clock_frequency(void)
+static inline u64 trace_clock_frequency(void)
 {
-       return 0LL;
+       return 1000000LL;
 }
 
 static inline u32 trace_clock_freq_scale(void)
 {
-       return 0;
+       return 1;
 }
 
 
This page took 0.026053 seconds and 4 git commands to generate.