0db227170c36a10de1c2774d06dd03aeadeeb07b
[sfrench/cifs-2.6.git] / kernel / livepatch / patch.h
1 #ifndef _LIVEPATCH_PATCH_H
2 #define _LIVEPATCH_PATCH_H
3
4 #include <linux/livepatch.h>
5 #include <linux/list.h>
6 #include <linux/ftrace.h>
7
8 /**
9  * struct klp_ops - structure for tracking registered ftrace ops structs
10  *
11  * A single ftrace_ops is shared between all enabled replacement functions
12  * (klp_func structs) which have the same old_addr.  This allows the switch
13  * between function versions to happen instantaneously by updating the klp_ops
14  * struct's func_stack list.  The winner is the klp_func at the top of the
15  * func_stack (front of the list).
16  *
17  * @node:       node for the global klp_ops list
18  * @func_stack: list head for the stack of klp_func's (active func is on top)
19  * @fops:       registered ftrace ops struct
20  */
21 struct klp_ops {
22         struct list_head node;
23         struct list_head func_stack;
24         struct ftrace_ops fops;
25 };
26
27 struct klp_ops *klp_find_ops(unsigned long old_addr);
28
29 int klp_patch_object(struct klp_object *obj);
30 void klp_unpatch_object(struct klp_object *obj);
31 void klp_unpatch_objects(struct klp_patch *patch);
32
33 #endif /* _LIVEPATCH_PATCH_H */