| 1 |
|
| 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
|