Lines Matching refs:func

67 	struct klp_func *func;  in klp_find_ops()  local
70 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
72 if (func->old_addr == old_addr) in klp_find_ops()
240 struct klp_func *func) in klp_find_verify_func_addr() argument
246 func->old_addr = 0; in klp_find_verify_func_addr()
249 if (!func->old_addr || klp_is_module(obj)) in klp_find_verify_func_addr()
250 ret = klp_find_object_symbol(obj->name, func->old_name, in klp_find_verify_func_addr()
251 &func->old_addr); in klp_find_verify_func_addr()
253 ret = klp_verify_vmlinux_symbol(func->old_name, in klp_find_verify_func_addr()
254 func->old_addr); in klp_find_verify_func_addr()
331 struct klp_func *func; in klp_ftrace_handler() local
336 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
338 if (WARN_ON_ONCE(!func)) in klp_ftrace_handler()
341 klp_arch_set_pc(regs, (unsigned long)func->new_func); in klp_ftrace_handler()
346 static void klp_disable_func(struct klp_func *func) in klp_disable_func() argument
350 WARN_ON(func->state != KLP_ENABLED); in klp_disable_func()
351 WARN_ON(!func->old_addr); in klp_disable_func()
353 ops = klp_find_ops(func->old_addr); in klp_disable_func()
359 WARN_ON(ftrace_set_filter_ip(&ops->fops, func->old_addr, 1, 0)); in klp_disable_func()
361 list_del_rcu(&func->stack_node); in klp_disable_func()
365 list_del_rcu(&func->stack_node); in klp_disable_func()
368 func->state = KLP_DISABLED; in klp_disable_func()
371 static int klp_enable_func(struct klp_func *func) in klp_enable_func() argument
376 if (WARN_ON(!func->old_addr)) in klp_enable_func()
379 if (WARN_ON(func->state != KLP_DISABLED)) in klp_enable_func()
382 ops = klp_find_ops(func->old_addr); in klp_enable_func()
388 ops->fops.func = klp_ftrace_handler; 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()
401 func->old_name, ret); in klp_enable_func()
408 func->old_name, ret); 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()
418 func->state = KLP_ENABLED; in klp_enable_func()
423 list_del_rcu(&func->stack_node); in klp_enable_func()
431 struct klp_func *func; in klp_disable_object() local
433 for (func = obj->funcs; func->old_name; func++) in klp_disable_object()
434 if (func->state == KLP_ENABLED) in klp_disable_object()
435 klp_disable_func(func); in klp_disable_object()
442 struct klp_func *func; in klp_enable_object() local
451 for (func = obj->funcs; func->old_name; func++) { in klp_enable_object()
452 ret = klp_enable_func(func); in klp_enable_object()
678 struct klp_func *func; in klp_free_funcs_limited() local
680 for (func = obj->funcs; func->old_name && func != limit; func++) in klp_free_funcs_limited()
681 kobject_put(&func->kobj); in klp_free_funcs_limited()
687 struct klp_func *func; in klp_free_object_loaded() local
691 for (func = obj->funcs; func->old_name; func++) in klp_free_object_loaded()
692 func->old_addr = 0; in klp_free_object_loaded()
718 static int klp_init_func(struct klp_object *obj, struct klp_func *func) in klp_init_func() argument
720 INIT_LIST_HEAD(&func->stack_node); in klp_init_func()
721 func->state = KLP_DISABLED; in klp_init_func()
723 return kobject_init_and_add(&func->kobj, &klp_ktype_func, in klp_init_func()
724 obj->kobj, "%s", func->old_name); in klp_init_func()
731 struct klp_func *func; in klp_init_object_loaded() local
740 for (func = obj->funcs; func->old_name; func++) { in klp_init_object_loaded()
741 ret = klp_find_verify_func_addr(obj, func); in klp_init_object_loaded()
751 struct klp_func *func; in klp_init_object() local
768 for (func = obj->funcs; func->old_name; func++) { in klp_init_object()
769 ret = klp_init_func(obj, func); in klp_init_object()
783 klp_free_funcs_limited(obj, func); in klp_init_object()