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