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 void klp_unpatch_objects(struct klp_patch *patch); 32 33 #endif /* _LIVEPATCH_PATCH_H */ 34