Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
Josh Poimboeuf | c349cdc | 2017-02-13 19:42:37 -0600 | [diff] [blame] | 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 |
Petr Mladek | 1951491 | 2019-01-09 13:43:19 +0100 | [diff] [blame] | 13 | * (klp_func structs) which have the same old_func. This allows the switch |
Josh Poimboeuf | c349cdc | 2017-02-13 19:42:37 -0600 | [diff] [blame] | 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 | |
Petr Mladek | 1951491 | 2019-01-09 13:43:19 +0100 | [diff] [blame] | 28 | struct klp_ops *klp_find_ops(void *old_func); |
Josh Poimboeuf | c349cdc | 2017-02-13 19:42:37 -0600 | [diff] [blame] | 29 | |
| 30 | int klp_patch_object(struct klp_object *obj); |
| 31 | void klp_unpatch_object(struct klp_object *obj); |
Josh Poimboeuf | d83a7cb | 2017-02-13 19:42:40 -0600 | [diff] [blame] | 32 | void klp_unpatch_objects(struct klp_patch *patch); |
Petr Mladek | d697bad | 2019-01-09 13:43:26 +0100 | [diff] [blame] | 33 | void klp_unpatch_objects_dynamic(struct klp_patch *patch); |
Josh Poimboeuf | c349cdc | 2017-02-13 19:42:37 -0600 | [diff] [blame] | 34 | |
| 35 | #endif /* _LIVEPATCH_PATCH_H */ |