summaryrefslogtreecommitdiffstats
path: root/kernel/livepatch/patch.h
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2017-06-02 17:49:10 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2017-06-02 17:49:10 -0700
commiteadcbfa58ae8693f0d6a0f591d8f51d55cf068e1 (patch)
treecff3f1c56a8bf15138b652ee9dab50dddd6edee5 /kernel/livepatch/patch.h
parentc4beedb8a914af9c8c1b6e67c753adf411e05160 (diff)
parent5ed02dbb497422bf225783f46e6eadd237d23d6b (diff)
downloadcachepc-linux-eadcbfa58ae8693f0d6a0f591d8f51d55cf068e1.tar.gz
cachepc-linux-eadcbfa58ae8693f0d6a0f591d8f51d55cf068e1.zip
Merge tag 'v4.12-rc3' into for-linus
Merge with mainline to get acpi_dev_present() needed by patches to axp20x-pek driver.
Diffstat (limited to 'kernel/livepatch/patch.h')
-rw-r--r--kernel/livepatch/patch.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/kernel/livepatch/patch.h b/kernel/livepatch/patch.h
new file mode 100644
index 000000000000..0db227170c36
--- /dev/null
+++ b/kernel/livepatch/patch.h
@@ -0,0 +1,33 @@
+#ifndef _LIVEPATCH_PATCH_H
+#define _LIVEPATCH_PATCH_H
+
+#include <linux/livepatch.h>
+#include <linux/list.h>
+#include <linux/ftrace.h>
+
+/**
+ * struct klp_ops - structure for tracking registered ftrace ops structs
+ *
+ * A single ftrace_ops is shared between all enabled replacement functions
+ * (klp_func structs) which have the same old_addr. This allows the switch
+ * between function versions to happen instantaneously by updating the klp_ops
+ * struct's func_stack list. The winner is the klp_func at the top of the
+ * func_stack (front of the list).
+ *
+ * @node: node for the global klp_ops list
+ * @func_stack: list head for the stack of klp_func's (active func is on top)
+ * @fops: registered ftrace ops struct
+ */
+struct klp_ops {
+ struct list_head node;
+ struct list_head func_stack;
+ struct ftrace_ops fops;
+};
+
+struct klp_ops *klp_find_ops(unsigned long old_addr);
+
+int klp_patch_object(struct klp_object *obj);
+void klp_unpatch_object(struct klp_object *obj);
+void klp_unpatch_objects(struct klp_patch *patch);
+
+#endif /* _LIVEPATCH_PATCH_H */