Lines Matching refs:fp
27 struct fprobe *fp; in fprobe_handler() local
30 fp = container_of(ops, struct fprobe, ops); in fprobe_handler()
31 if (fprobe_disabled(fp)) in fprobe_handler()
36 fp->nmissed++; in fprobe_handler()
40 if (fp->entry_handler) in fprobe_handler()
41 fp->entry_handler(fp, ip, ftrace_get_regs(fregs)); in fprobe_handler()
43 if (fp->exit_handler) { in fprobe_handler()
44 rh = rethook_try_get(fp->rethook); in fprobe_handler()
46 fp->nmissed++; in fprobe_handler()
62 struct fprobe *fp = container_of(ops, struct fprobe, ops); in fprobe_kprobe_handler() local
65 fp->nmissed++; in fprobe_kprobe_handler()
76 struct fprobe *fp = (struct fprobe *)data; in fprobe_exit_handler() local
79 if (!fp || fprobe_disabled(fp)) in fprobe_exit_handler()
84 fp->exit_handler(fp, fpr->entry_ip, regs); in fprobe_exit_handler()
116 static void fprobe_init(struct fprobe *fp) in fprobe_init() argument
118 fp->nmissed = 0; in fprobe_init()
119 if (fprobe_shared_with_kprobes(fp)) in fprobe_init()
120 fp->ops.func = fprobe_kprobe_handler; in fprobe_init()
122 fp->ops.func = fprobe_handler; in fprobe_init()
123 fp->ops.flags |= FTRACE_OPS_FL_SAVE_REGS; in fprobe_init()
126 static int fprobe_init_rethook(struct fprobe *fp, int num) in fprobe_init_rethook() argument
133 if (!fp->exit_handler) { in fprobe_init_rethook()
134 fp->rethook = NULL; in fprobe_init_rethook()
143 fp->rethook = rethook_alloc((void *)fp, fprobe_exit_handler); in fprobe_init_rethook()
144 if (!fp->rethook) in fprobe_init_rethook()
151 rethook_free(fp->rethook); in fprobe_init_rethook()
152 fp->rethook = NULL; in fprobe_init_rethook()
155 rethook_add_node(fp->rethook, &node->node); in fprobe_init_rethook()
160 static void fprobe_fail_cleanup(struct fprobe *fp) in fprobe_fail_cleanup() argument
162 if (fp->rethook) { in fprobe_fail_cleanup()
164 rethook_free(fp->rethook); in fprobe_fail_cleanup()
165 fp->rethook = NULL; in fprobe_fail_cleanup()
167 ftrace_free_filter(&fp->ops); in fprobe_fail_cleanup()
181 int register_fprobe(struct fprobe *fp, const char *filter, const char *notfilter) in register_fprobe() argument
187 if (!fp || !filter) in register_fprobe()
190 fprobe_init(fp); in register_fprobe()
194 ret = ftrace_set_filter(&fp->ops, str, len, 0); in register_fprobe()
202 ret = ftrace_set_notrace(&fp->ops, str, len, 0); in register_fprobe()
212 hash = rcu_access_pointer(fp->ops.local_hash.filter_hash); in register_fprobe()
216 ret = fprobe_init_rethook(fp, (int)hash->count); in register_fprobe()
218 ret = register_ftrace_function(&fp->ops); in register_fprobe()
222 fprobe_fail_cleanup(fp); in register_fprobe()
240 int register_fprobe_ips(struct fprobe *fp, unsigned long *addrs, int num) in register_fprobe_ips() argument
244 if (!fp || !addrs || num <= 0) in register_fprobe_ips()
247 fprobe_init(fp); in register_fprobe_ips()
249 ret = ftrace_set_filter_ips(&fp->ops, addrs, num, 0, 0); in register_fprobe_ips()
253 ret = fprobe_init_rethook(fp, num); in register_fprobe_ips()
255 ret = register_ftrace_function(&fp->ops); in register_fprobe_ips()
258 fprobe_fail_cleanup(fp); in register_fprobe_ips()
274 int register_fprobe_syms(struct fprobe *fp, const char **syms, int num) in register_fprobe_syms() argument
279 if (!fp || !syms || num <= 0) in register_fprobe_syms()
286 ret = register_fprobe_ips(fp, addrs, num); in register_fprobe_syms()
302 int unregister_fprobe(struct fprobe *fp) in unregister_fprobe() argument
306 if (!fp || (fp->ops.saved_func != fprobe_handler && in unregister_fprobe()
307 fp->ops.saved_func != fprobe_kprobe_handler)) in unregister_fprobe()
316 if (fp->rethook) in unregister_fprobe()
317 rethook_free(fp->rethook); in unregister_fprobe()
319 ret = unregister_ftrace_function(&fp->ops); in unregister_fprobe()
323 ftrace_free_filter(&fp->ops); in unregister_fprobe()