Lines Matching refs:func
40 struct klp_func *func; in klp_find_ops() local
43 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
45 if (func->old_addr == old_addr) in klp_find_ops()
58 struct klp_func *func; in klp_ftrace_handler() local
69 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
77 if (WARN_ON_ONCE(!func)) in klp_ftrace_handler()
93 if (unlikely(func->transition)) { in klp_ftrace_handler()
113 func = list_entry_rcu(func->stack_node.next, in klp_ftrace_handler()
116 if (&func->stack_node == &ops->func_stack) in klp_ftrace_handler()
121 klp_arch_set_pc(regs, (unsigned long)func->new_func); in klp_ftrace_handler()
139 static void klp_unpatch_func(struct klp_func *func) in klp_unpatch_func() argument
143 if (WARN_ON(!func->patched)) in klp_unpatch_func()
145 if (WARN_ON(!func->old_addr)) in klp_unpatch_func()
148 ops = klp_find_ops(func->old_addr); in klp_unpatch_func()
155 ftrace_loc = klp_get_ftrace_location(func->old_addr); in klp_unpatch_func()
162 list_del_rcu(&func->stack_node); in klp_unpatch_func()
166 list_del_rcu(&func->stack_node); in klp_unpatch_func()
169 func->patched = false; in klp_unpatch_func()
172 static int klp_patch_func(struct klp_func *func) in klp_patch_func() argument
177 if (WARN_ON(!func->old_addr)) in klp_patch_func()
180 if (WARN_ON(func->patched)) in klp_patch_func()
183 ops = klp_find_ops(func->old_addr); in klp_patch_func()
187 ftrace_loc = klp_get_ftrace_location(func->old_addr); in klp_patch_func()
190 func->old_name); in klp_patch_func()
198 ops->fops.func = klp_ftrace_handler; in klp_patch_func()
206 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
211 func->old_name, ret); in klp_patch_func()
218 func->old_name, ret); in klp_patch_func()
225 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
228 func->patched = true; in klp_patch_func()
233 list_del_rcu(&func->stack_node); in klp_patch_func()
241 struct klp_func *func; in klp_unpatch_object() local
243 klp_for_each_func(obj, func) in klp_unpatch_object()
244 if (func->patched) in klp_unpatch_object()
245 klp_unpatch_func(func); in klp_unpatch_object()
252 struct klp_func *func; in klp_patch_object() local
258 klp_for_each_func(obj, func) { in klp_patch_object()
259 ret = klp_patch_func(func); in klp_patch_object()