From: Alexei Starovoitov <ast@xxxxxxxxxx> introduce kernel_tracepoint_find_by_name() helper to let bpf core find tracepoint by name and later attach bpf probe to a tracepoint Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> --- include/linux/tracepoint.h | 6 ++++++ kernel/tracepoint.c | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index c92f4adbc0d7..a00b84473211 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h @@ -43,6 +43,12 @@ tracepoint_probe_unregister(struct tracepoint *tp, void *probe, void *data); extern void for_each_kernel_tracepoint(void (*fct)(struct tracepoint *tp, void *priv), void *priv); +#ifdef CONFIG_TRACEPOINTS +struct tracepoint *kernel_tracepoint_find_by_name(const char *name); +#else +static inline struct tracepoint * +kernel_tracepoint_find_by_name(const char *name) { return NULL; } +#endif #ifdef CONFIG_MODULES struct tp_module { diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c index 671b13457387..e2a9a0391ae2 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c @@ -528,6 +528,15 @@ void for_each_kernel_tracepoint(void (*fct)(struct tracepoint *tp, void *priv), } EXPORT_SYMBOL_GPL(for_each_kernel_tracepoint); +struct tracepoint *kernel_tracepoint_find_by_name(const char *name) +{ + struct tracepoint * const *tp = __start___tracepoints_ptrs; + + for (; tp < __stop___tracepoints_ptrs; tp++) + if (!strcmp((*tp)->name, name)) + return *tp; + return NULL; +} #ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS /* NB: reg/unreg are called while guarded with the tracepoints_mutex */ -- 2.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html