Lines Matching refs:ops
27 struct klp_ops *ops; in klp_find_ops() local
30 list_for_each_entry(ops, &klp_ops, node) { in klp_find_ops()
31 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
34 return ops; in klp_find_ops()
45 struct klp_ops *ops; in klp_ftrace_handler() local
50 ops = container_of(fops, struct klp_ops, fops); in klp_ftrace_handler()
62 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
109 if (&func->stack_node == &ops->func_stack) in klp_ftrace_handler()
142 struct klp_ops *ops; in klp_unpatch_func() local
149 ops = klp_find_ops(func->old_func); in klp_unpatch_func()
150 if (WARN_ON(!ops)) in klp_unpatch_func()
153 if (list_is_singular(&ops->func_stack)) { in klp_unpatch_func()
161 WARN_ON(unregister_ftrace_function(&ops->fops)); in klp_unpatch_func()
162 WARN_ON(ftrace_set_filter_ip(&ops->fops, ftrace_loc, 1, 0)); in klp_unpatch_func()
165 list_del(&ops->node); in klp_unpatch_func()
166 kfree(ops); in klp_unpatch_func()
176 struct klp_ops *ops; in klp_patch_func() local
185 ops = klp_find_ops(func->old_func); in klp_patch_func()
186 if (!ops) { in klp_patch_func()
197 ops = kzalloc(sizeof(*ops), GFP_KERNEL); in klp_patch_func()
198 if (!ops) in klp_patch_func()
201 ops->fops.func = klp_ftrace_handler; in klp_patch_func()
202 ops->fops.flags = FTRACE_OPS_FL_DYNAMIC | in klp_patch_func()
209 list_add(&ops->node, &klp_ops); in klp_patch_func()
211 INIT_LIST_HEAD(&ops->func_stack); in klp_patch_func()
212 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
214 ret = ftrace_set_filter_ip(&ops->fops, ftrace_loc, 0, 0); in klp_patch_func()
221 ret = register_ftrace_function(&ops->fops); in klp_patch_func()
225 ftrace_set_filter_ip(&ops->fops, ftrace_loc, 1, 0); in klp_patch_func()
231 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
240 list_del(&ops->node); in klp_patch_func()
241 kfree(ops); in klp_patch_func()