diff options
author | Josh Poimboeuf <jpoimboe@redhat.com> | 2017-02-13 19:42:37 -0600 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2017-03-08 09:23:40 +0100 |
commit | c349cdcaba589fb49cf105093ebc695eb8b9ff08 (patch) | |
tree | 0ab3165baae80dbfed236b5e2c23afd3d14ba14d /kernel/livepatch/patch.h | |
parent | aa82dc3e00da63751bb9dfab26983037b79fc39d (diff) | |
download | op-kernel-dev-c349cdcaba589fb49cf105093ebc695eb8b9ff08.zip op-kernel-dev-c349cdcaba589fb49cf105093ebc695eb8b9ff08.tar.gz |
livepatch: move patching functions into patch.c
Move functions related to the actual patching of functions and objects
into a new patch.c file.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Acked-by: Miroslav Benes <mbenes@suse.cz>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch/patch.h')
-rw-r--r-- | kernel/livepatch/patch.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/livepatch/patch.h b/kernel/livepatch/patch.h new file mode 100644 index 0000000..2d0cce0 --- /dev/null +++ b/kernel/livepatch/patch.h @@ -0,0 +1,32 @@ +#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_addr. 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(unsigned long old_addr); + +int klp_patch_object(struct klp_object *obj); +void klp_unpatch_object(struct klp_object *obj); + +#endif /* _LIVEPATCH_PATCH_H */ |