LTTng trace-clock: shrink kernel blacklist
[lttng-modules.git] / wrapper / trace-clock.h
index 05ab055aa436a69148c1783f9aaf346b8afb6462..d31141dc463f8f629279a42fc976f8c605cf8cac 100644 (file)
@@ -1,15 +1,29 @@
+#ifndef _LTTNG_TRACE_CLOCK_H
+#define _LTTNG_TRACE_CLOCK_H
+
 /*
- * Copyright (C) 2011 Mathieu Desnoyers (mathieu.desnoyers@efficios.com)
+ * wrapper/trace-clock.h
  *
  * Contains LTTng trace clock mapping to LTTng trace clock or mainline monotonic
  * clock. This wrapper depends on CONFIG_HIGH_RES_TIMERS=y.
  *
- * Dual LGPL v2.1/GPL v2 license.
+ * Copyright (C) 2011-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; only
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef _LTTNG_TRACE_CLOCK_H
-#define _LTTNG_TRACE_CLOCK_H
-
 #ifdef CONFIG_HAVE_TRACE_CLOCK
 #include <linux/trace-clock.h>
 #else /* CONFIG_HAVE_TRACE_CLOCK */
 #include <linux/ktime.h>
 #include <linux/time.h>
 #include <linux/hrtimer.h>
+#include <linux/version.h>
+#include "../lttng-kernel-version.h"
+#include "random.h"
+
+#if LTTNG_KERNEL_RANGE(3,10,0, 3,10,13) || LTTNG_KERNEL_RANGE(3,11,0, 3,11,2)
+#error "Linux kernels 3.10 and 3.11 introduce a deadlock in the timekeeping subsystem. Fixed by commit 7bd36014460f793c19e7d6c94dab67b0afcfcb7f \"timekeeping: Fix HRTICK related deadlock from ntp lock changes\" in Linux."
+#endif
 
 static inline u64 trace_clock_monotonic_wrapper(void)
 {
@@ -31,7 +52,7 @@ static inline u64 trace_clock_monotonic_wrapper(void)
                return (u64) -EIO;
 
        ktime = ktime_get();
-       return (u64) ktime.tv64;
+       return ktime_to_ns(ktime);
 }
 
 static inline u32 trace_clock_read32(void)
@@ -44,18 +65,24 @@ static inline u64 trace_clock_read64(void)
        return (u64) trace_clock_monotonic_wrapper();
 }
 
-static inline u64 trace_clock_frequency(void)
+static inline u64 trace_clock_freq(void)
 {
-       return (u64)NSEC_PER_SEC;
+       return (u64) NSEC_PER_SEC;
 }
 
-static inline u32 trace_clock_freq_scale(void)
+static inline int trace_clock_uuid(char *uuid)
 {
-       return 1;
+       return wrapper_get_bootid(uuid);
 }
 
 static inline int get_trace_clock(void)
 {
+       /*
+        * LTTng: Using mainline kernel monotonic clock. NMIs will not be
+        * traced, and expect significant performance degradation compared to
+        * the LTTng trace clocks. Integration of the LTTng 0.x trace clocks
+        * into LTTng 2.0 is planned in a near future.
+        */
        printk(KERN_WARNING "LTTng: Using mainline kernel monotonic clock.\n");
        printk(KERN_WARNING "  * NMIs will not be traced,\n");
        printk(KERN_WARNING "  * expect significant performance degradation compared to the\n");
@@ -63,8 +90,6 @@ static inline int get_trace_clock(void)
        printk(KERN_WARNING "Integration of the LTTng 0.x trace clocks into LTTng 2.0 is planned\n");
        printk(KERN_WARNING "in a near future.\n");
 
-#warning "LTTng: Using mainline kernel monotonic clock. NMIs will not be traced, and expect significant performance degradation compared to the LTTng trace clocks. Integration of the LTTng 0.x trace clocks into LTTng 2.0 is planned in a near future."
-
        return 0;
 }
 
This page took 0.025104 seconds and 4 git commands to generate.