Lines Matching refs:ops
66 struct klp_ops *ops; in klp_find_ops() local
69 list_for_each_entry(ops, &klp_ops, node) { in klp_find_ops()
70 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
73 return ops; in klp_find_ops()
330 struct klp_ops *ops; in klp_ftrace_handler() local
333 ops = container_of(fops, struct klp_ops, fops); in klp_ftrace_handler()
336 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
348 struct klp_ops *ops; in klp_disable_func() local
353 ops = klp_find_ops(func->old_addr); in klp_disable_func()
354 if (WARN_ON(!ops)) in klp_disable_func()
357 if (list_is_singular(&ops->func_stack)) { in klp_disable_func()
358 WARN_ON(unregister_ftrace_function(&ops->fops)); in klp_disable_func()
359 WARN_ON(ftrace_set_filter_ip(&ops->fops, func->old_addr, 1, 0)); in klp_disable_func()
362 list_del(&ops->node); in klp_disable_func()
363 kfree(ops); in klp_disable_func()
373 struct klp_ops *ops; in klp_enable_func() local
382 ops = klp_find_ops(func->old_addr); in klp_enable_func()
383 if (!ops) { in klp_enable_func()
384 ops = kzalloc(sizeof(*ops), GFP_KERNEL); in klp_enable_func()
385 if (!ops) in klp_enable_func()
388 ops->fops.func = klp_ftrace_handler; in klp_enable_func()
389 ops->fops.flags = FTRACE_OPS_FL_SAVE_REGS | in klp_enable_func()
393 list_add(&ops->node, &klp_ops); in klp_enable_func()
395 INIT_LIST_HEAD(&ops->func_stack); in klp_enable_func()
396 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_enable_func()
398 ret = ftrace_set_filter_ip(&ops->fops, func->old_addr, 0, 0); in klp_enable_func()
405 ret = register_ftrace_function(&ops->fops); in klp_enable_func()
409 ftrace_set_filter_ip(&ops->fops, func->old_addr, 1, 0); in klp_enable_func()
415 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_enable_func()
424 list_del(&ops->node); in klp_enable_func()
425 kfree(ops); in klp_enable_func()