patch.h (1146B)
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 */ 22struct klp_ops { 23 struct list_head node; 24 struct list_head func_stack; 25 struct ftrace_ops fops; 26}; 27 28struct klp_ops *klp_find_ops(void *old_func); 29 30int klp_patch_object(struct klp_object *obj); 31void klp_unpatch_object(struct klp_object *obj); 32void klp_unpatch_objects(struct klp_patch *patch); 33void klp_unpatch_objects_dynamic(struct klp_patch *patch); 34 35#endif /* _LIVEPATCH_PATCH_H */