Add a README.cygwin detailing Cygwin specific build/install instructions
[lttng-ust.git] / liblttng-ust / clock.h
index ed191b0bf9b7ca4b75a55ddbb17682e052b0ad4c..88eca432a5733f7e4bc35f1878b911617a5119d5 100644 (file)
@@ -24,6 +24,8 @@
 #include <sys/time.h>
 #include <stdint.h>
 #include <stddef.h>
+#include <stdio.h>
+#include "lttng-ust-uuid.h"
 
 /* TRACE CLOCK */
 
 
 /* Choosing correct trace clock */
 
-static __inline__ uint64_t trace_clock_read64(void)
+static __inline__
+uint64_t trace_clock_read64(void)
 {
        struct timespec ts;
 
        clock_gettime(CLOCK_MONOTONIC, &ts);
-       return (ts.tv_sec * 1000000000) + ts.tv_nsec;
+       return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec;
 }
 
-#if __i386__ || __x86_64__
-static __inline__ uint64_t trace_clock_frequency(void)
+static __inline__
+uint64_t trace_clock_freq(void)
 {
-       return 1000000000LL;
+       return 1000000000ULL;
 }
-#endif /* #else #if __i386__ || __x86_64__ */
 
-static __inline__ uint32_t trace_clock_freq_scale(void)
+static __inline__
+int trace_clock_uuid(char *uuid)
 {
-       return 1;
+       int ret = 0;
+       size_t len;
+       FILE *fp;
+
+       /*
+        * boot_id needs to be read once before being used concurrently
+        * to deal with a Linux kernel race. A fix is proposed for
+        * upstream, but the work-around is needed for older kernels.
+        */
+       fp = fopen("/proc/sys/kernel/random/boot_id", "r");
+       if (!fp) {
+               return -ENOENT;
+       }
+       len = fread(uuid, 1, LTTNG_UST_UUID_STR_LEN - 1, fp);
+       if (len < LTTNG_UST_UUID_STR_LEN - 1) {
+               ret = -EINVAL;
+               goto end;
+       }
+       uuid[LTTNG_UST_UUID_STR_LEN - 1] = '\0';
+end:
+       fclose(fp);
+       return ret;
 }
 
 #endif /* _UST_CLOCK_H */
This page took 0.022986 seconds and 4 git commands to generate.