klp_enable_patch(klp_patch)
klp_initialized()
klp_have_reliable_stack()
klp_is_patch_compatible()
klp_init_patch_early(klp_patch)
kobject_init(&klp_patch->kobj, &klp_ktype_patch)
klp_init_object_early(klp_patch, obj), for each klp_patch->objs
kobject_init(&obj->kobj, &klp_ktype_object);
klp_for_each_func_static(obj, func), for each klp_object->funcs
kobject_init(&func->kobj, &klp_ktype_func);
klp_init_patch(klp_patch)
kobject_add(&klp_patch->kobj, klp_root_kobj, "%s", patch->mod->name);
klp_init_object(&klp_patch, obj), for each klp_patch->objs
klp_find_object_module(obj)
klp_init_func(obj, func), for each klp_object->funcs
klp_init_object_loaded(klp_patch, obj)
list_add_tail(&klp_patch->list, &klp_patches)
__klp_enable_patch(klp_patch)
klp_init_transition(klp_patch, KLP_PATCHED)
klp_transition_patch = klp_patch
klp_target_state = state
task->patch_state = initial_state, for each process
task->patch_state = initial_state, for each swapper task
klp_pre_patch_callback(obj), for each klp_patch->objs
ret = (*obj->callbacks.pre_patch)(obj);
klp_patch_object(obj), for each klp_patch->objs
klp_patch_func(func), for each klp_object->funcs
klp_start_transition()
klp_patch->enabled = true
klp_try_complete_transition()