Lines Matching refs:ops

39 	struct klp_ops *ops;  in klp_find_ops()  local
42 list_for_each_entry(ops, &klp_ops, node) { in klp_find_ops()
43 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
46 return ops; in klp_find_ops()
57 struct klp_ops *ops; in klp_ftrace_handler() local
61 ops = container_of(fops, struct klp_ops, fops); in klp_ftrace_handler()
69 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
116 if (&func->stack_node == &ops->func_stack) in klp_ftrace_handler()
141 struct klp_ops *ops; in klp_unpatch_func() local
148 ops = klp_find_ops(func->old_addr); in klp_unpatch_func()
149 if (WARN_ON(!ops)) in klp_unpatch_func()
152 if (list_is_singular(&ops->func_stack)) { in klp_unpatch_func()
159 WARN_ON(unregister_ftrace_function(&ops->fops)); in klp_unpatch_func()
160 WARN_ON(ftrace_set_filter_ip(&ops->fops, ftrace_loc, 1, 0)); in klp_unpatch_func()
163 list_del(&ops->node); in klp_unpatch_func()
164 kfree(ops); in klp_unpatch_func()
174 struct klp_ops *ops; in klp_patch_func() local
183 ops = klp_find_ops(func->old_addr); in klp_patch_func()
184 if (!ops) { in klp_patch_func()
194 ops = kzalloc(sizeof(*ops), GFP_KERNEL); in klp_patch_func()
195 if (!ops) in klp_patch_func()
198 ops->fops.func = klp_ftrace_handler; in klp_patch_func()
199 ops->fops.flags = FTRACE_OPS_FL_SAVE_REGS | in klp_patch_func()
203 list_add(&ops->node, &klp_ops); in klp_patch_func()
205 INIT_LIST_HEAD(&ops->func_stack); in klp_patch_func()
206 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
208 ret = ftrace_set_filter_ip(&ops->fops, ftrace_loc, 0, 0); in klp_patch_func()
215 ret = register_ftrace_function(&ops->fops); in klp_patch_func()
219 ftrace_set_filter_ip(&ops->fops, ftrace_loc, 1, 0); in klp_patch_func()
225 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_patch_func()
234 list_del(&ops->node); in klp_patch_func()
235 kfree(ops); in klp_patch_func()