blob: f6a853adcc0031d09ed8345e17ee678c033945bd [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Jiri Kosina10517422017-03-08 14:27:05 +01002#ifndef _LIVEPATCH_CORE_H
3#define _LIVEPATCH_CORE_H
4
Joe Lawrence93862e32017-10-13 15:08:41 -04005#include <linux/livepatch.h>
6
Jiri Kosina10517422017-03-08 14:27:05 +01007extern struct mutex klp_mutex;
Petr Mladek68007282019-01-09 13:43:22 +01008extern struct list_head klp_patches;
Jiri Kosina10517422017-03-08 14:27:05 +01009
Petr Mladek958ef1e2019-01-09 13:43:23 +010010void klp_free_patch_start(struct klp_patch *patch);
Jason Barone1452b62019-01-09 13:43:25 +010011void klp_discard_replaced_patches(struct klp_patch *new_patch);
Petr Mladek958ef1e2019-01-09 13:43:23 +010012
Joe Lawrence93862e32017-10-13 15:08:41 -040013static inline bool klp_is_object_loaded(struct klp_object *obj)
14{
15 return !obj->name || obj->mod;
16}
17
18static inline int klp_pre_patch_callback(struct klp_object *obj)
19{
Petr Mladek5aaf1ab2017-10-20 16:56:50 +020020 int ret = 0;
Joe Lawrence93862e32017-10-13 15:08:41 -040021
Petr Mladek5aaf1ab2017-10-20 16:56:50 +020022 if (obj->callbacks.pre_patch)
23 ret = (*obj->callbacks.pre_patch)(obj);
Joe Lawrence93862e32017-10-13 15:08:41 -040024
25 obj->callbacks.post_unpatch_enabled = !ret;
26
27 return ret;
28}
29
30static inline void klp_post_patch_callback(struct klp_object *obj)
31{
32 if (obj->callbacks.post_patch)
33 (*obj->callbacks.post_patch)(obj);
34}
35
36static inline void klp_pre_unpatch_callback(struct klp_object *obj)
37{
38 if (obj->callbacks.pre_unpatch)
39 (*obj->callbacks.pre_unpatch)(obj);
40}
41
42static inline void klp_post_unpatch_callback(struct klp_object *obj)
43{
44 if (obj->callbacks.post_unpatch_enabled &&
45 obj->callbacks.post_unpatch)
46 (*obj->callbacks.post_unpatch)(obj);
Petr Mladek5aaf1ab2017-10-20 16:56:50 +020047
48 obj->callbacks.post_unpatch_enabled = false;
Joe Lawrence93862e32017-10-13 15:08:41 -040049}
50
Jiri Kosina10517422017-03-08 14:27:05 +010051#endif /* _LIVEPATCH_CORE_H */