Version 2.0.6
[lttng-ust.git] / liblttng-ust / clock.h
index b5d3e77cd20b7383e1723087c3b43a54233b69d5..82a7b45cd5294a3f35c63e172ea8105d0e5c2e0d 100644 (file)
 #include <sys/time.h>
 #include <stdint.h>
 #include <stddef.h>
+#include <stdio.h>
+
+/*
+ * Includes final \0.
+ */
+#define CLOCK_UUID_LEN         37
 
 /* 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;
 }
 
-static __inline__ uint32_t trace_clock_freq_scale(void)
+static __inline__
+uint64_t trace_clock_freq(void)
 {
-       return 1;
+       return 1000000000ULL;
+}
+
+static __inline__
+const int trace_clock_uuid(char *uuid)
+{
+       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, CLOCK_UUID_LEN - 1, fp);
+       if (len < CLOCK_UUID_LEN - 1) {
+               ret = -EINVAL;
+               goto end;
+       }
+       uuid[CLOCK_UUID_LEN - 1] = '\0';
+end:
+       fclose(fp);
+       return ret;
 }
 
 #endif /* _UST_CLOCK_H */
This page took 0.023317 seconds and 4 git commands to generate.