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
57 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
65 if (WARN_ON_ONCE(!func)) in klp_ftrace_handler()
81 if (unlikely(func->transition)) { in klp_ftrace_handler()
101 func = list_entry_rcu(func->stack_node.next, in klp_ftrace_handler()
104 if (&func->stack_node == &ops->func_stack) in klp_ftrace_handler()
113 if (func->nop) in klp_ftrace_handler()
116 klp_arch_set_pc(regs, (unsigned long)func->new_func); in klp_ftrace_handler()
135 static void klp_unpatch_func(struct klp_func *func) in klp_unpatch_func() argument
139 if (WARN_ON(!func->patched)) in klp_unpatch_func()
141 if (WARN_ON(!func->old_func)) in klp_unpatch_func()
144 ops = klp_find_ops(func->old_func); in klp_unpatch_func()
152 klp_get_ftrace_location((unsigned long)func->old_func); in klp_unpatch_func()
159 list_del_rcu(&func->stack_node); in klp_unpatch_func()
163 list_del_rcu(&func->stack_node); in klp_unpatch_func()
166 func->patched = false; in klp_unpatch_func()
169 static int klp_patch_func(struct klp_func *func) in klp_patch_func() argument
174 if (WARN_ON(!func->old_func)) in klp_patch_func()
177 if (WARN_ON(func->patched)) in klp_patch_func()
180 ops = klp_find_ops(func->old_func); in klp_patch_func()
185 klp_get_ftrace_location((unsigned long)func->old_func); in klp_patch_func()
188 func->old_name); in klp_patch_func()
196 ops->fops.func = klp_ftrace_handler; in klp_patch_func()
204 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
209 func->old_name, ret); in klp_patch_func()
216 func->old_name, ret); in klp_patch_func()
223 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
226 func->patched = true; in klp_patch_func()
231 list_del_rcu(&func->stack_node); in klp_patch_func()
239 struct klp_func *func; in __klp_unpatch_object() local
241 klp_for_each_func(obj, func) { in __klp_unpatch_object()
242 if (nops_only && !func->nop) in __klp_unpatch_object()
245 if (func->patched) in __klp_unpatch_object()
246 klp_unpatch_func(func); in __klp_unpatch_object()
261 struct klp_func *func; in klp_patch_object() local
267 klp_for_each_func(obj, func) { in klp_patch_object()
268 ret = klp_patch_func(func); in klp_patch_object()