From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexei Starovoitov Subject: [PATCH v6 bpf-next 07/11] tracepoint: introduce kernel_tracepoint_find_by_name Date: Mon, 26 Mar 2018 19:47:02 -0700 Message-ID: <20180327024706.2064725-8-ast@fb.com> References: <20180327024706.2064725-1-ast@fb.com> Mime-Version: 1.0 Content-Type: text/plain Cc: , , , , , , To: Return-path: Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:59114 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752587AbeC0CrJ (ORCPT ); Mon, 26 Mar 2018 22:47:09 -0400 Received: from pps.filterd (m0001303.ppops.net [127.0.0.1]) by m0001303.ppops.net (8.16.0.22/8.16.0.22) with SMTP id w2R2l8mQ028217 for ; Mon, 26 Mar 2018 19:47:09 -0700 Received: from mail.thefacebook.com ([199.201.64.23]) by m0001303.ppops.net with ESMTP id 2gyc9br32e-5 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Mon, 26 Mar 2018 19:47:09 -0700 In-Reply-To: <20180327024706.2064725-1-ast@fb.com> Sender: netdev-owner@vger.kernel.org List-ID: From: Alexei Starovoitov 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 --- 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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexei Starovoitov Subject: [PATCH v6 bpf-next 07/11] tracepoint: introduce kernel_tracepoint_find_by_name Date: Mon, 26 Mar 2018 19:47:02 -0700 Message-ID: <20180327024706.2064725-8-ast@fb.com> References: <20180327024706.2064725-1-ast@fb.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: In-Reply-To: <20180327024706.2064725-1-ast@fb.com> Sender: netdev-owner@vger.kernel.org To: davem@davemloft.net Cc: daniel@iogearbox.net, torvalds@linux-foundation.org, peterz@infradead.org, rostedt@goodmis.org, netdev@vger.kernel.org, kernel-team@fb.com, linux-api@vger.kernel.org List-Id: linux-api@vger.kernel.org From: Alexei Starovoitov 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 --- 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