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