Move functions related to the actual patching of functions and objects into a new patch.c file.
Showing the changes to kernel/livepatch/patch.h (1 of 4 files). Show all
Unified · Split
| @@ -0,0 +1,32 @@ | ||
| 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 | + | |
| 32 | +#endif /* _LIVEPATCH_PATCH_H */ | |