+
+#include <unistd.h>
+
+#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]))
+
+/* TRACE CLOCK */
+
+static inline u64 trace_clock_read64(void)
+{
+ uint32_t low;
+ uint32_t high;
+ uint64_t retval;
+ __asm__ volatile ("rdtsc\n" : "=a" (low), "=d" (high));
+
+ retval = high;
+ retval <<= 32;
+ return retval | low;
+}
+
+#if 0
+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;
+}
+#endif
+
+static inline u64 trace_clock_frequency(void)
+{
+ return 1000000LL;
+}
+
+static inline u32 trace_clock_freq_scale(void)
+{
+ return 1;
+}
+
+