110517429SJiri Kosina #ifndef _LIVEPATCH_CORE_H 210517429SJiri Kosina #define _LIVEPATCH_CORE_H 310517429SJiri Kosina 493862e38SJoe Lawrence #include <linux/livepatch.h> 593862e38SJoe Lawrence 610517429SJiri Kosina extern struct mutex klp_mutex; 710517429SJiri Kosina 893862e38SJoe Lawrence static inline bool klp_is_object_loaded(struct klp_object *obj) 993862e38SJoe Lawrence { 1093862e38SJoe Lawrence return !obj->name || obj->mod; 1193862e38SJoe Lawrence } 1293862e38SJoe Lawrence 1393862e38SJoe Lawrence static inline int klp_pre_patch_callback(struct klp_object *obj) 1493862e38SJoe Lawrence { 155aaf1ab5SPetr Mladek int ret = 0; 1693862e38SJoe Lawrence 175aaf1ab5SPetr Mladek if (obj->callbacks.pre_patch) 185aaf1ab5SPetr Mladek ret = (*obj->callbacks.pre_patch)(obj); 1993862e38SJoe Lawrence 2093862e38SJoe Lawrence obj->callbacks.post_unpatch_enabled = !ret; 2193862e38SJoe Lawrence 2293862e38SJoe Lawrence return ret; 2393862e38SJoe Lawrence } 2493862e38SJoe Lawrence 2593862e38SJoe Lawrence static inline void klp_post_patch_callback(struct klp_object *obj) 2693862e38SJoe Lawrence { 2793862e38SJoe Lawrence if (obj->callbacks.post_patch) 2893862e38SJoe Lawrence (*obj->callbacks.post_patch)(obj); 2993862e38SJoe Lawrence } 3093862e38SJoe Lawrence 3193862e38SJoe Lawrence static inline void klp_pre_unpatch_callback(struct klp_object *obj) 3293862e38SJoe Lawrence { 3393862e38SJoe Lawrence if (obj->callbacks.pre_unpatch) 3493862e38SJoe Lawrence (*obj->callbacks.pre_unpatch)(obj); 3593862e38SJoe Lawrence } 3693862e38SJoe Lawrence 3793862e38SJoe Lawrence static inline void klp_post_unpatch_callback(struct klp_object *obj) 3893862e38SJoe Lawrence { 3993862e38SJoe Lawrence if (obj->callbacks.post_unpatch_enabled && 4093862e38SJoe Lawrence obj->callbacks.post_unpatch) 4193862e38SJoe Lawrence (*obj->callbacks.post_unpatch)(obj); 425aaf1ab5SPetr Mladek 435aaf1ab5SPetr Mladek obj->callbacks.post_unpatch_enabled = false; 4493862e38SJoe Lawrence } 4593862e38SJoe Lawrence 4610517429SJiri Kosina #endif /* _LIVEPATCH_CORE_H */ 47