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