Lines Matching refs:func

28 	struct klp_func *func;  in klp_find_ops()  local
31 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
33 if (func->old_func == old_func) in klp_find_ops()
46 struct klp_func *func; in klp_ftrace_handler() local
62 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
70 if (WARN_ON_ONCE(!func)) in klp_ftrace_handler()
86 if (unlikely(func->transition)) { in klp_ftrace_handler()
106 func = list_entry_rcu(func->stack_node.next, in klp_ftrace_handler()
109 if (&func->stack_node == &ops->func_stack) in klp_ftrace_handler()
118 if (func->nop) in klp_ftrace_handler()
121 klp_arch_set_pc(fregs, (unsigned long)func->new_func); in klp_ftrace_handler()
140 static void klp_unpatch_func(struct klp_func *func) in klp_unpatch_func() argument
144 if (WARN_ON(!func->patched)) in klp_unpatch_func()
146 if (WARN_ON(!func->old_func)) in klp_unpatch_func()
149 ops = klp_find_ops(func->old_func); in klp_unpatch_func()
157 klp_get_ftrace_location((unsigned long)func->old_func); in klp_unpatch_func()
164 list_del_rcu(&func->stack_node); in klp_unpatch_func()
168 list_del_rcu(&func->stack_node); in klp_unpatch_func()
171 func->patched = false; in klp_unpatch_func()
174 static int klp_patch_func(struct klp_func *func) in klp_patch_func() argument
179 if (WARN_ON(!func->old_func)) in klp_patch_func()
182 if (WARN_ON(func->patched)) in klp_patch_func()
185 ops = klp_find_ops(func->old_func); in klp_patch_func()
190 klp_get_ftrace_location((unsigned long)func->old_func); in klp_patch_func()
193 func->old_name); in klp_patch_func()
201 ops->fops.func = klp_ftrace_handler; in klp_patch_func()
212 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
217 func->old_name, ret); in klp_patch_func()
224 func->old_name, ret); in klp_patch_func()
231 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
234 func->patched = true; in klp_patch_func()
239 list_del_rcu(&func->stack_node); in klp_patch_func()
247 struct klp_func *func; in __klp_unpatch_object() local
249 klp_for_each_func(obj, func) { in __klp_unpatch_object()
250 if (nops_only && !func->nop) in __klp_unpatch_object()
253 if (func->patched) in __klp_unpatch_object()
254 klp_unpatch_func(func); in __klp_unpatch_object()
269 struct klp_func *func; in klp_patch_object() local
275 klp_for_each_func(obj, func) { in klp_patch_object()
276 ret = klp_patch_func(func); in klp_patch_object()