X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=share%2Fkernelcompat.h;h=9139e75275ddf4c8c3e86d7d30c0916b32233b6d;hb=54d6c4f2322470b741653a49711c507023e4f48a;hp=c5512b8d4c848f4c35ee91c8cc23c9e4f080b3f6;hpb=8d938dbd14e689a294f8a251e4ac255985c65ad5;p=ust.git diff --git a/share/kernelcompat.h b/share/kernelcompat.h index c5512b8..9139e75 100644 --- a/share/kernelcompat.h +++ b/share/kernelcompat.h @@ -63,6 +63,7 @@ typedef uint64_t u64; #include #define DEFINE_MUTEX(m) pthread_mutex_t (m) = PTHREAD_MUTEX_INITIALIZER; +#define DECLARE_MUTEX(m) extern pthread_mutex_t (m); #define mutex_lock(m) pthread_mutex_lock(m) @@ -82,10 +83,12 @@ typedef int spinlock_t; #include #define kmalloc(s, t) malloc(s) -#define kzalloc(s, t) malloc(s) +#define kzalloc(s, t) zmalloc(s) #define kfree(p) free((void *)p) #define kstrdup(s, t) strdup(s) +#define zmalloc(s) calloc(1, s) + #define GFP_KERNEL /* PRINTK */ @@ -108,6 +111,8 @@ typedef int spinlock_t; #define rcu_assign_pointer(a, b) do {} while(0) #define call_rcu_sched(a,b) do {} while(0) #define rcu_barrier_sched() do {} while(0) +#define rcu_read_lock_sched_notrace() do{} while (0) +#define rcu_read_unlock_sched_notrace() do{} while (0) /* ATOMICITY */ @@ -154,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"); @@ -181,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; } @@ -278,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; } @@ -302,4 +334,6 @@ static inline u32 trace_clock_freq_scale(void) #define EXPORT_SYMBOL_GPL(a) /*nothing*/ +#define smp_processor_id() (-1) + #endif /* KERNELCOMPAT_H */