blob: d5f2fbe373e05b2b591a55704a1c2b9014edb178 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Josh Poimboeufc349cdc2017-02-13 19:42:37 -06002#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
Petr Mladek19514912019-01-09 13:43:19 +010013 * (klp_func structs) which have the same old_func. This allows the switch
Josh Poimboeufc349cdc2017-02-13 19:42:37 -060014 * 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
Petr Mladek19514912019-01-09 13:43:19 +010028struct klp_ops *klp_find_ops(void *old_func);
Josh Poimboeufc349cdc2017-02-13 19:42:37 -060029
30int klp_patch_object(struct klp_object *obj);
31void klp_unpatch_object(struct klp_object *obj);
Josh Poimboeufd83a7cb2017-02-13 19:42:40 -060032void klp_unpatch_objects(struct klp_patch *patch);
Petr Mladekd697bad2019-01-09 13:43:26 +010033void klp_unpatch_objects_dynamic(struct klp_patch *patch);
Josh Poimboeufc349cdc2017-02-13 19:42:37 -060034
35#endif /* _LIVEPATCH_PATCH_H */