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 */ 36