]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - kernel/livepatch/core.h
UBUNTU: Ubuntu-4.15.0-96.97
[mirror_ubuntu-bionic-kernel.git] / kernel / livepatch / core.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LIVEPATCH_CORE_H
3 #define _LIVEPATCH_CORE_H
4
5 #include <linux/livepatch.h>
6
7 extern struct mutex klp_mutex;
8
9 static inline bool klp_is_object_loaded(struct klp_object *obj)
10 {
11 return !obj->name || obj->mod;
12 }
13
14 static inline int klp_pre_patch_callback(struct klp_object *obj)
15 {
16 int ret = 0;
17
18 if (obj->callbacks.pre_patch)
19 ret = (*obj->callbacks.pre_patch)(obj);
20
21 obj->callbacks.post_unpatch_enabled = !ret;
22
23 return ret;
24 }
25
26 static inline void klp_post_patch_callback(struct klp_object *obj)
27 {
28 if (obj->callbacks.post_patch)
29 (*obj->callbacks.post_patch)(obj);
30 }
31
32 static inline void klp_pre_unpatch_callback(struct klp_object *obj)
33 {
34 if (obj->callbacks.pre_unpatch)
35 (*obj->callbacks.pre_unpatch)(obj);
36 }
37
38 static inline void klp_post_unpatch_callback(struct klp_object *obj)
39 {
40 if (obj->callbacks.post_unpatch_enabled &&
41 obj->callbacks.post_unpatch)
42 (*obj->callbacks.post_unpatch)(obj);
43
44 obj->callbacks.post_unpatch_enabled = false;
45 }
46
47 #endif /* _LIVEPATCH_CORE_H */