Blacklist Linux kernels 3.10+
[lttng-modules.git] / wrapper / trace-clock.h
index 11bef42b195ea97f44cf88daa2bc4c06a6003e3a..4266f2567ef47f3c06ab90990052497ce18ba6c1 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 _LTT_TRACE_CLOCK_H
-#define _LTT_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 "random.h"
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0))
+#error "Linux kernels 3.10 and 3.11 introduce a deadlock in the timekeeping subsystem. See http://lkml.kernel.org/r/1378943457-27314-1-git-send-email-john.stultz@linaro.org for details. Awaiting patch merge into Linux master, stable-3.10 and stable-3.11 for fine-grained kernel version blacklisting."
+#endif
 
 static inline u64 trace_clock_monotonic_wrapper(void)
 {
@@ -31,7 +51,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 +64,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 +89,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;
 }
 
@@ -74,4 +98,4 @@ static inline void put_trace_clock(void)
 
 #endif /* CONFIG_HAVE_TRACE_CLOCK */
 
-#endif /* _LTT_TRACE_CLOCK_H */
+#endif /* _LTTNG_TRACE_CLOCK_H */
This page took 0.02426 seconds and 4 git commands to generate.