X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=share%2Fkernelcompat.h;h=b0c77e0972a66f8d03235494f4e5be72fcbc281a;hb=772030fed323e388da467735cf4b5e8781acb710;hp=5bd8e87503f22ecf30b3d2d170f77c5e3e15b13b;hpb=b6bf28ecd4c07e7865d340f1600a35d6edc05ec8;p=ust.git diff --git a/share/kernelcompat.h b/share/kernelcompat.h index 5bd8e87..b0c77e0 100644 --- a/share/kernelcompat.h +++ b/share/kernelcompat.h @@ -1,9 +1,16 @@ #ifndef KERNELCOMPAT_H #define KERNELCOMPAT_H -#include "compiler.h" +#include +#include #include +#include + +/* FIXME: libkcompat must not define arch-specific local ops, as ust *must* + * fallback to the normal atomic ops. Fix things so we don't add them and + * break things accidentally. + */ #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ @@ -14,6 +21,7 @@ #define KERN_INFO "" #define KERN_ERR "" #define KERN_ALERT "" +#define KERN_WARNING "" /* ERROR OPS */ @@ -37,14 +45,7 @@ static inline long IS_ERR(const void *ptr) } -/* FIXED SIZE INTEGERS */ - -#include - -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef uint64_t u64; +/* Min / Max */ #define min_t(type, x, y) ({ \ type __min1 = (x); \ @@ -62,69 +63,33 @@ 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) #define mutex_unlock(m) pthread_mutex_unlock(m) + /* MALLOCATION */ #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 */ #include #define printk(fmt, args...) printf(fmt, ## args) -/* MEMORY BARRIERS */ - -#define smp_rmb() do {} while(0) -#define smp_wmb() do {} while(0) -#define smp_mb() do {} while(0) -#define smp_mb__after_atomic_inc() do {} while(0) - -#define read_barrier_depends() do {} while(0) -#define smp_read_barrier_depends() do {} while(0) - -/* RCU */ -#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) - -/* ATOMICITY */ - -#include - -typedef struct { sig_atomic_t counter; } atomic_t; - -static inline int atomic_dec_and_test(atomic_t *p) -{ - (p->counter)--; - return !p->counter; -} - -static inline void atomic_set(atomic_t *p, int v) -{ - p->counter=v; -} - -static inline void atomic_inc(atomic_t *p) -{ - p->counter++; -} - -static int atomic_read(atomic_t *p) -{ - return p->counter; -} - -/* CACHE */ +/* ATTRIBUTES */ #define ____cacheline_aligned @@ -166,6 +131,19 @@ static __inline__ int get_count_order(unsigned int count) } + + +#include + +#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) +#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) +#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) +#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) +#define PAGE_MASK (~(PAGE_SIZE-1)) + + + + /* ARRAYS */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) @@ -174,17 +152,38 @@ static __inline__ int get_count_order(unsigned int count) static inline u64 trace_clock_read64(void) { - return 0LL; + uint32_t low; + uint32_t high; + uint64_t retval; + __asm__ volatile ("rdtsc\n" : "=a" (low), "=d" (high)); + + retval = high; + retval <<= 32; + return retval | low; } -static inline unsigned int trace_clock_frequency(void) +//static inline u64 trace_clock_read64(void) +//{ +// struct timeval tv; +// u64 retval; +// +// gettimeofday(&tv, NULL); +// retval = tv.tv_sec; +// retval *= 1000000; +// retval += tv.tv_usec; +// +// return retval; +//} + +static inline u64 trace_clock_frequency(void) { - return 0LL; + return 1000000LL; } static inline u32 trace_clock_freq_scale(void) { - return 0; + return 1; } + #endif /* KERNELCOMPAT_H */