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()
129 struct klp_ops *ops; in klp_unpatch_func() local
136 ops = klp_find_ops(func->old_func); in klp_unpatch_func()
137 if (WARN_ON(!ops)) in klp_unpatch_func()
140 if (list_is_singular(&ops->func_stack)) { in klp_unpatch_func()
147 WARN_ON(unregister_ftrace_function(&ops->fops)); in klp_unpatch_func()
148 WARN_ON(ftrace_set_filter_ip(&ops->fops, ftrace_loc, 1, 0)); in klp_unpatch_func()
151 list_del(&ops->node); in klp_unpatch_func()
152 kfree(ops); in klp_unpatch_func()
162 struct klp_ops *ops; in klp_patch_func() local
171 ops = klp_find_ops(func->old_func); in klp_patch_func()
172 if (!ops) { in klp_patch_func()
182 ops = kzalloc(sizeof(*ops), GFP_KERNEL); in klp_patch_func()
183 if (!ops) in klp_patch_func()
186 ops->fops.func = klp_ftrace_handler; in klp_patch_func()
187 ops->fops.flags = FTRACE_OPS_FL_DYNAMIC | in klp_patch_func()
194 list_add(&ops->node, &klp_ops); in klp_patch_func()
196 INIT_LIST_HEAD(&ops->func_stack); in klp_patch_func()
197 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
199 ret = ftrace_set_filter_ip(&ops->fops, ftrace_loc, 0, 0); in klp_patch_func()
206 ret = register_ftrace_function(&ops->fops); in klp_patch_func()
210 ftrace_set_filter_ip(&ops->fops, ftrace_loc, 1, 0); in klp_patch_func()
216 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
225 list_del(&ops->node); in klp_patch_func()
226 kfree(ops); in klp_patch_func()