summaryrefslogtreecommitdiff
path: root/backport-include/linux/static_key.h
diff options
context:
space:
mode:
Diffstat (limited to 'backport-include/linux/static_key.h')
-rw-r--r--backport-include/linux/static_key.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/backport-include/linux/static_key.h b/backport-include/linux/static_key.h
new file mode 100644
index 0000000..4b82eec
--- /dev/null
+++ b/backport-include/linux/static_key.h
@@ -0,0 +1,49 @@
+#ifndef _BACKPORTS_LINUX_STATIC_KEY_H
+#define _BACKPORTS_LINUX_STATIC_KEY_H 1
+
+#include <linux/version.h>
+
+#if LINUX_VERSION_IS_GEQ(3,3,0) /* kernels >= 3.3 */
+/*
+ * XXX: NOTE!
+ *
+ * Some 3.3 kernels carry <linux/static.h> but some don't even though its
+ * its including <linux/jump_label.h>. What makes it more confusing is that
+ * later all this got shuffled. The safe thing to do then is to just assume
+ * kernels 3.3..3.4 don't have it and include <linux/jump_label.h> instead,
+ * and for newer kernels include <linux/static_key.h>.
+ */
+#if LINUX_VERSION_IS_GEQ(3,5,0)
+#include_next <linux/static_key.h>
+#else
+#include <linux/jump_label.h>
+#endif
+
+#else /* kernels < 3.3 */
+/*
+ * in between 2.6.37 - 3.5 there's a slew of changes that make
+ * it hard to backport this properly. If you are interested in
+ * trying you can use this as reference:
+ *
+ * http://drvbp1.linux-foundation.org/~mcgrof/examples/2014/04/01/backport-static-keys.patch
+ *
+ * And these notes:
+ *
+ * < v2.6.37 - No tracing support
+ * bf5438fc - v2.6.37 - Jump label support added primarily for tracing but
+ * tracing was broken, later kernels started sporting
+ * functional tracing.
+ * d430d3d7e - v3.0 - Static branch optimizations for jump labels
+ * c5905afb - v3.3 - Static keys split out, note on the below issue
+ * c5905afb - v3.5 - git describe --contains c5905afb claims but not true!
+ * c4b2c0c5f - v3.13 - Adds static_key_initialized(), STATIC_KEY_CHECK_USE()
+ *
+ * Because all of this we skip 2.6.37 - 3.3 but and adding support for older
+ * can be done by of carrying over the non-architecture optimized code.
+ * Carrying new changes into this file is a burden though so if we really
+ * find use for this we could just split the non optimized versions upstream
+ * and copy that through an automatic process.
+ */
+#endif /* kernels < 3.3 */
+
+#endif /* _BACKPORTS_LINUX_STATIC_KEY_H */