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