| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _LIVEPATCH_PATCH_H |
| #define _LIVEPATCH_PATCH_H |
| |
| #include <linux/livepatch.h> |
| #include <linux/list.h> |
| #include <linux/ftrace.h> |
| |
| /** |
| * struct klp_ops - structure for tracking registered ftrace ops structs |
| * |
| * A single ftrace_ops is shared between all enabled replacement functions |
| * (klp_func structs) which have the same old_func. This allows the switch |
| * between function versions to happen instantaneously by updating the klp_ops |
| * struct's func_stack list. The winner is the klp_func at the top of the |
| * func_stack (front of the list). |
| * |
| * @node: node for the global klp_ops list |
| * @func_stack: list head for the stack of klp_func's (active func is on top) |
| * @fops: registered ftrace ops struct |
| */ |
| struct klp_ops { |
| struct list_head node; |
| struct list_head func_stack; |
| struct ftrace_ops fops; |
| }; |
| |
| struct klp_ops *klp_find_ops(void *old_func); |
| |
| int klp_patch_object(struct klp_object *obj); |
| void klp_unpatch_object(struct klp_object *obj); |
| void klp_unpatch_objects(struct klp_patch *patch); |
| void klp_unpatch_objects_dynamic(struct klp_patch *patch); |
| |
| #endif /* _LIVEPATCH_PATCH_H */ |