1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LIVEPATCH_PATCH_H 2 #ifndef _LIVEPATCH_PATCH_H 3 #define _LIVEPATCH_PATCH_H 3 #define _LIVEPATCH_PATCH_H 4 4 5 #include <linux/livepatch.h> 5 #include <linux/livepatch.h> 6 #include <linux/list.h> 6 #include <linux/list.h> 7 #include <linux/ftrace.h> 7 #include <linux/ftrace.h> 8 8 9 /** 9 /** 10 * struct klp_ops - structure for tracking reg 10 * struct klp_ops - structure for tracking registered ftrace ops structs 11 * 11 * 12 * A single ftrace_ops is shared between all e 12 * A single ftrace_ops is shared between all enabled replacement functions 13 * (klp_func structs) which have the same old_ 13 * (klp_func structs) which have the same old_func. This allows the switch 14 * between function versions to happen instant 14 * between function versions to happen instantaneously by updating the klp_ops 15 * struct's func_stack list. The winner is th 15 * struct's func_stack list. The winner is the klp_func at the top of the 16 * func_stack (front of the list). 16 * func_stack (front of the list). 17 * 17 * 18 * @node: node for the global klp_ops li 18 * @node: node for the global klp_ops list 19 * @func_stack: list head for the stack of klp 19 * @func_stack: list head for the stack of klp_func's (active func is on top) 20 * @fops: registered ftrace ops struct 20 * @fops: registered ftrace ops struct 21 */ 21 */ 22 struct klp_ops { 22 struct klp_ops { 23 struct list_head node; 23 struct list_head node; 24 struct list_head func_stack; 24 struct list_head func_stack; 25 struct ftrace_ops fops; 25 struct ftrace_ops fops; 26 }; 26 }; 27 27 28 struct klp_ops *klp_find_ops(void *old_func); 28 struct klp_ops *klp_find_ops(void *old_func); 29 29 30 int klp_patch_object(struct klp_object *obj); 30 int klp_patch_object(struct klp_object *obj); 31 void klp_unpatch_object(struct klp_object *obj 31 void klp_unpatch_object(struct klp_object *obj); 32 void klp_unpatch_objects(struct klp_patch *pat 32 void klp_unpatch_objects(struct klp_patch *patch); 33 void klp_unpatch_objects_dynamic(struct klp_pa 33 void klp_unpatch_objects_dynamic(struct klp_patch *patch); 34 34 35 #endif /* _LIVEPATCH_PATCH_H */ 35 #endif /* _LIVEPATCH_PATCH_H */ 36 36
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.