From: Jiri Olsa <jolsa@redhat.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: "Jiri Olsa" <jolsa@kernel.org>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
"Andrii Nakryiko" <andriin@fb.com>, "Yonghong Song" <yhs@fb.com>,
"Song Liu" <songliubraving@fb.com>,
"Martin KaFai Lau" <kafai@fb.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"David Miller" <davem@redhat.com>,
"Björn Töpel" <bjorn.topel@intel.com>,
"John Fastabend" <john.fastabend@gmail.com>,
"Jesper Dangaard Brouer" <hawk@kernel.org>
Subject: Re: [PATCH 13/14] bpf: Add dispatchers to kallsyms
Date: Wed, 12 Feb 2020 11:52:52 +0100 [thread overview]
Message-ID: <20200212105252.GD183981@krava> (raw)
In-Reply-To: <CAEf4BzZM-pc4Yva8kKsuD6QjOY8bVCGUzDJCdoeZzVOTc2zV2A@mail.gmail.com>
On Tue, Feb 11, 2020 at 11:03:23AM -0800, Andrii Nakryiko wrote:
> On Sat, Feb 8, 2020 at 7:43 AM Jiri Olsa <jolsa@kernel.org> wrote:
> >
> > Adding dispatchers to kallsyms. It's displayed as
> > bpf_dispatcher_<NAME>
> >
> > where NAME is the name of dispatcher.
> >
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> > include/linux/bpf.h | 19 ++++++++++++-------
> > kernel/bpf/dispatcher.c | 6 ++++++
> > 2 files changed, 18 insertions(+), 7 deletions(-)
> >
> > diff --git a/include/linux/bpf.h b/include/linux/bpf.h
> > index b91bac10d3ea..837cdc093d2c 100644
> > --- a/include/linux/bpf.h
> > +++ b/include/linux/bpf.h
> > @@ -520,6 +520,7 @@ struct bpf_dispatcher {
> > int num_progs;
> > void *image;
> > u32 image_off;
> > + struct bpf_ksym ksym;
> > };
> >
> > static __always_inline unsigned int bpf_dispatcher_nop_func(
> > @@ -535,13 +536,17 @@ struct bpf_trampoline *bpf_trampoline_lookup(u64 key);
> > int bpf_trampoline_link_prog(struct bpf_prog *prog);
> > int bpf_trampoline_unlink_prog(struct bpf_prog *prog);
> > void bpf_trampoline_put(struct bpf_trampoline *tr);
> > -#define BPF_DISPATCHER_INIT(name) { \
> > - .mutex = __MUTEX_INITIALIZER(name.mutex), \
> > - .func = &name##_func, \
> > - .progs = {}, \
> > - .num_progs = 0, \
> > - .image = NULL, \
> > - .image_off = 0 \
> > +#define BPF_DISPATCHER_INIT(_name) { \
> > + .mutex = __MUTEX_INITIALIZER(_name.mutex), \
> > + .func = &_name##_func, \
> > + .progs = {}, \
> > + .num_progs = 0, \
> > + .image = NULL, \
> > + .image_off = 0, \
> > + .ksym = { \
> > + .name = #_name, \
> > + .lnode = LIST_HEAD_INIT(_name.ksym.lnode), \
> > + }, \
> > }
> >
> > #define DEFINE_BPF_DISPATCHER(name) \
> > diff --git a/kernel/bpf/dispatcher.c b/kernel/bpf/dispatcher.c
> > index b3e5b214fed8..8771d2cc5840 100644
> > --- a/kernel/bpf/dispatcher.c
> > +++ b/kernel/bpf/dispatcher.c
> > @@ -152,6 +152,12 @@ void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from,
> > if (!changed)
> > goto out;
> >
> > + if (!prev_num_progs)
> > + bpf_image_ksym_add(d->image, &d->ksym);
> > +
> > + if (!d->num_progs)
> > + bpf_ksym_del(&d->ksym);
> > +
> > bpf_dispatcher_update(d, prev_num_progs);
>
> On slightly unrelated note: seems like bpf_dispatcher_update won't
> propagate any lower-level errors back, which seems pretty bad as a
> bunch of stuff can go wrong.
>
> Björn, was it a conscious decision or this just slipped through the cracks?
>
> Jiri, reason I started looking at this was twofold:
> 1. you add/remove symbol before dispatcher is updated, which is
> different order from BPF trampoline updates. I think updating symbols
> after successful update makes more sense, no?
right, I guess I did not care, because there's no error returned
from bpf_dispatcher_update as you pointed out.. I'll check if we
can add that and add/del symbols afterwards
> 2. I was wondering if bpf_dispatcher_update() could return 0/1 (and <0
> on error, of course), depending on whether dispatcher is present or
> not. Though I'm not hard set on this.
yes, that might be a way.. I'll check
thanks,
jirka
next prev parent reply other threads:[~2020-02-12 10:53 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-08 15:41 [PATCH 00/14] bpf: Add trampoline and dispatcher to /proc/kallsyms Jiri Olsa
2020-02-08 15:41 ` [PATCH 01/14] x86/mm: Rename is_kernel_text to __is_kernel_text Jiri Olsa
2020-02-08 15:41 ` [PATCH 02/14] bpf: Add bpf_trampoline_ name prefix for DECLARE_BPF_DISPATCHER Jiri Olsa
2020-02-08 15:41 ` [PATCH 03/14] bpf: Add struct bpf_ksym Jiri Olsa
2020-02-08 15:41 ` [PATCH 04/14] bpf: Add name to " Jiri Olsa
2020-02-08 15:42 ` [PATCH 05/14] bpf: Add lnode list node " Jiri Olsa
2020-02-08 15:42 ` [PATCH 06/14] bpf: Add bpf_kallsyms_tree tree Jiri Olsa
2020-02-11 18:21 ` Andrii Nakryiko
2020-02-12 10:49 ` Jiri Olsa
2020-02-08 15:42 ` [PATCH 07/14] bpf: Move bpf_tree add/del from bpf_prog_ksym_node_add/del Jiri Olsa
2020-02-08 15:42 ` [PATCH 08/14] bpf: Separate kallsyms add/del functions Jiri Olsa
2020-02-08 15:42 ` [PATCH 09/14] bpf: Add bpf_ksym_add/del functions Jiri Olsa
2020-02-08 15:42 ` [PATCH 10/14] bpf: Re-initialize lnode in bpf_ksym_del Jiri Olsa
2020-02-11 18:28 ` Andrii Nakryiko
2020-02-12 10:43 ` Jiri Olsa
2020-02-08 15:42 ` [PATCH 11/14] bpf: Rename bpf_tree to bpf_progs_tree Jiri Olsa
2020-02-08 15:42 ` [PATCH 12/14] bpf: Add trampolines to kallsyms Jiri Olsa
2020-02-11 18:51 ` Andrii Nakryiko
2020-02-12 11:10 ` Jiri Olsa
2020-02-12 16:33 ` Andrii Nakryiko
2020-02-12 22:58 ` Jiri Olsa
2020-02-12 23:02 ` Jiri Olsa
2020-02-08 15:42 ` [PATCH 13/14] bpf: Add dispatchers " Jiri Olsa
2020-02-11 19:03 ` Andrii Nakryiko
2020-02-12 10:52 ` Jiri Olsa [this message]
2020-02-08 15:42 ` [PATCH 14/14] bpf: Sort bpf kallsyms symbols Jiri Olsa
2020-02-11 19:12 ` Andrii Nakryiko
2020-02-10 15:51 ` [PATCH 00/14] bpf: Add trampoline and dispatcher to /proc/kallsyms Björn Töpel
2020-02-10 16:17 ` Jiri Olsa
2020-02-11 19:32 ` Arnaldo Carvalho de Melo
2020-02-12 11:13 ` Jiri Olsa
2020-02-12 13:31 ` Arnaldo Carvalho de Melo
2020-02-12 22:40 ` Jiri Olsa
2020-02-13 16:23 ` Jiri Olsa
2020-02-11 19:13 ` Arnaldo Carvalho de Melo
2020-02-12 10:46 ` Jiri Olsa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200212105252.GD183981@krava \
--to=jolsa@redhat.com \
--cc=andrii.nakryiko@gmail.com \
--cc=andriin@fb.com \
--cc=ast@kernel.org \
--cc=bjorn.topel@intel.com \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@redhat.com \
--cc=hawk@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kafai@fb.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.