+#include <asm/local.h>
+#include <lttng-kernel-version.h>
+#include <lttng-clock.h>
+#include <wrapper/compiler.h>
+#include <wrapper/percpu-defs.h>
+#include <wrapper/random.h>
+#include <blacklist/timekeeping.h>
+
+extern struct lttng_trace_clock *lttng_trace_clock;
+
+/*
+ * Upstream Linux commit 27727df240c7 ("Avoid taking lock in NMI path with
+ * CONFIG_DEBUG_TIMEKEEPING") introduces a buggy ktime_get_mono_fast_ns().
+ * This is fixed by patch "timekeeping: Fix __ktime_get_fast_ns() regression".
+ */
+#if (LTTNG_KERNEL_RANGE(4,8,0, 4,8,2) \
+ || LTTNG_KERNEL_RANGE(4,7,4, 4,7,8) \
+ || LTTNG_KERNEL_RANGE(4,4,20, 4,4,25) \
+ || LTTNG_KERNEL_RANGE(4,1,32, 4,1,35))
+#define LTTNG_CLOCK_NMI_SAFE_BROKEN
+#endif
+
+/*
+ * We need clock values to be monotonically increasing per-cpu, which is
+ * not strictly guaranteed by ktime_get_mono_fast_ns(). It is
+ * straightforward to do on architectures with a 64-bit cmpxchg(), but
+ * not so on architectures without 64-bit cmpxchg. For now, only enable
+ * this feature on 64-bit architectures.
+ */