move everything out of trunk
[lttv.git] / markers-userspace / kernel-api.h
diff --git a/markers-userspace/kernel-api.h b/markers-userspace/kernel-api.h
new file mode 100644 (file)
index 0000000..dc3bc25
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Kernel API extracted from Linux kernel headers.
+ */
+
+#ifndef __KERNEL_API
+#define __KERNEL_API
+
+#include <errno.h>
+#include <syscall.h>
+#include <string.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DECLARE_IMV(type, name) extern __typeof__(type) name##__imv
+#define DEFINE_IMV(type, name)  __typeof__(type) name##__imv
+
+#define likely(x)      __builtin_expect(!!(x), 1)
+#define unlikely(x)    __builtin_expect(!!(x), 0)
+
+/**
+ * imv_read - read immediate variable
+ * @name: immediate value name
+ *
+ * Reads the value of @name.
+ */
+#define imv_read(name)                 _imv_read(name)
+
+/**
+ * _imv_read - Read immediate value with standard memory load.
+ * @name: immediate value name
+ *
+ * Force a data read of the immediate value instead of the immediate value
+ * based mechanism. Useful for __init and __exit section data read.
+ */
+#define _imv_read(name)                (name##__imv)
+
+#ifdef __i386__
+#define __NR_marker             333
+#define __NR_trace              334
+#elif defined(__x86_64__)
+#define __NR_marker            295
+#define __NR_trace             296
+#else
+#error "Unsupported architecture for userspace markers"
+#endif
+
+#define sys_marker(...) syscall(__NR_marker, __VA_ARGS__)
+#define sys_trace(...) syscall(__NR_trace, __VA_ARGS__)
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
This page took 0.023953 seconds and 4 git commands to generate.