All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexei Starovoitov <alexei.starovoitov@gmail.com>
To: Jiri Olsa <jolsa@kernel.org>
Cc: "Alexei Starovoitov" <ast@kernel.org>,
	"Daniel Borkmann" <daniel@iogearbox.net>,
	netdev@vger.kernel.org, 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>,
	"Arnaldo Carvalho de Melo" <acme@redhat.com>
Subject: Re: [PATCH 10/18] bpf: Re-initialize lnode in bpf_ksym_del
Date: Thu, 27 Feb 2020 11:50:36 -0800	[thread overview]
Message-ID: <20200227195034.jq76twzwxdlfcwpd@ast-mbp> (raw)
In-Reply-To: <20200226130345.209469-11-jolsa@kernel.org>

On Wed, Feb 26, 2020 at 02:03:37PM +0100, Jiri Olsa wrote:
> When bpf_prog is removed from kallsyms it's on the way
> out to be removed, so we don't care about lnode state.
> 
> However the bpf_ksym_del will be used also by bpf_trampoline
> and bpf_dispatcher objects, which stay allocated even when
> they are not in kallsyms list, hence the lnode re-init.
> 
> The list_del_rcu commentary states that we need to call
> synchronize_rcu, before we can change/re-init the list_head
> pointers.
> 
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  kernel/bpf/core.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
> index c95424fc53de..1af2109b45c7 100644
> --- a/kernel/bpf/core.c
> +++ b/kernel/bpf/core.c
> @@ -672,6 +672,13 @@ void bpf_ksym_del(struct bpf_ksym *ksym)
>  	spin_lock_bh(&bpf_lock);
>  	__bpf_ksym_del(ksym);
>  	spin_unlock_bh(&bpf_lock);
> +
> +	/*
> +	 * As explained in list_del_rcu, We must call synchronize_rcu
> +	 * before changing list_head pointers.
> +	 */
> +	synchronize_rcu();
> +	INIT_LIST_HEAD_RCU(&ksym->lnode);

I don't understand what this is for.
The comment made it even more confusing.
What kind of ksym reuse are you expecting?

Looking at trampoline and dispatcher patches I think cnt == 0
condition is unnecessary. Just add them to ksym at creation time
and remove from ksym at destroy. Both are executable code sections.
Though RIP should never point into them while there are no progs
I think it's better to keep them in ksym always.
Imagine sw race conditions in destruction. CPU bugs. What not.

In patch 3 the name
bpf_get_prog_addr_region(const struct bpf_prog *prog)
became wrong and 'const' pointer makes it even more misleading.
The function is not getting prog addr. It's setting ksym's addr.
I think it should be called:
bpf_ksym_set_addr(struct bpf_ksym *ksym);
__always_inline should be removed too.

Similar in patch 4:
static void bpf_get_prog_name(const struct bpf_prog *prog)
also is wrong for the same reasons.
It probably should be:
static void bpf_ksym_set_name(struct bpf_ksym *ksym);

I'm still not confortable with patch 15 sorting bit.
next = rb_next(&ksym->tnode.node[0]);
if (next)
is too tricky for me. I cannot wrap my head yet.
Since user space doesn't rely on sorted order could you drop it?

Do patches 16-18 strongly depend on patches 1-15 ?
We can take them via bpf-next tree. No problem. Just need Arnaldo's ack.

Overall looks great. All around important work.
Please address above and respin. I would like to land it soon.

  parent reply	other threads:[~2020-02-27 19:50 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-26 13:03 [PATCHv3 00/18] bpf: Add trampoline and dispatcher to /proc/kallsyms Jiri Olsa
2020-02-26 13:03 ` [PATCH 01/18] x86/mm: Rename is_kernel_text to __is_kernel_text Jiri Olsa
2020-02-26 18:44   ` Song Liu
2020-02-26 13:03 ` [PATCH 02/18] bpf: Add bpf_trampoline_ name prefix for DECLARE_BPF_DISPATCHER Jiri Olsa
2020-02-26 18:54   ` Song Liu
2020-02-26 13:03 ` [PATCH 03/18] bpf: Add struct bpf_ksym Jiri Olsa
2020-02-26 19:01   ` Song Liu
2020-02-26 13:03 ` [PATCH 04/18] bpf: Add name to " Jiri Olsa
2020-02-26 21:14   ` Song Liu
2020-02-27  8:50     ` Jiri Olsa
2020-02-27 18:59       ` Song Liu
2020-03-01 18:31         ` Jiri Olsa
2020-02-26 13:03 ` [PATCH 05/18] bpf: Add lnode list node " Jiri Olsa
2020-02-26 22:51   ` Song Liu
2020-02-27  8:15     ` Jiri Olsa
2020-02-26 13:03 ` [PATCH 06/18] bpf: Add bpf_ksym_tree tree Jiri Olsa
2020-02-26 23:10   ` Song Liu
2020-02-26 13:03 ` [PATCH 07/18] bpf: Move bpf_tree add/del from bpf_prog_ksym_node_add/del Jiri Olsa
2020-02-26 23:12   ` Song Liu
2020-02-26 13:03 ` [PATCH 08/18] bpf: Separate kallsyms add/del functions Jiri Olsa
2020-02-26 23:14   ` Song Liu
2020-02-26 13:03 ` [PATCH 09/18] bpf: Add bpf_ksym_add/del functions Jiri Olsa
2020-02-26 23:16   ` Song Liu
2020-02-26 13:03 ` [PATCH 10/18] bpf: Re-initialize lnode in bpf_ksym_del Jiri Olsa
2020-02-26 23:21   ` Song Liu
2020-02-27 19:50   ` Alexei Starovoitov [this message]
2020-02-28 12:17     ` Jiri Olsa
2020-02-28 13:18       ` Arnaldo Carvalho de Melo
2020-02-28 13:16     ` Arnaldo Carvalho de Melo
2020-02-26 13:03 ` [PATCH 11/18] bpf: Rename bpf_tree to bpf_progs_tree Jiri Olsa
2020-02-26 23:22   ` Song Liu
2020-02-26 13:03 ` [PATCH 12/18] bpf: Add trampolines to kallsyms Jiri Olsa
2020-02-26 23:36   ` Song Liu
2020-02-27  6:26   ` Martin KaFai Lau
2020-02-27  8:08     ` Jiri Olsa
2020-02-26 13:03 ` [PATCH 13/18] bpf: Return error value in bpf_dispatcher_update Jiri Olsa
2020-02-26 23:45   ` Song Liu
2020-02-26 13:03 ` [PATCH 14/18] bpf: Add dispatchers to kallsyms Jiri Olsa
2020-02-26 23:48   ` Song Liu
2020-02-26 13:03 ` [PATCH 15/18] bpf: Sort bpf kallsyms symbols Jiri Olsa
2020-02-26 23:57   ` Song Liu
2020-02-26 13:03 ` [PATCH 16/18] perf tools: Synthesize bpf_trampoline/dispatcher ksymbol event Jiri Olsa
2020-02-27  5:50   ` Song Liu
2020-02-28 13:14   ` Arnaldo Carvalho de Melo
2020-02-26 13:03 ` [PATCH 17/18] perf tools: Set ksymbol dso as loaded on arrival Jiri Olsa
2020-02-27  5:52   ` Song Liu
2020-02-28 13:15   ` Arnaldo Carvalho de Melo
2020-02-26 13:03 ` [PATCH 18/18] perf annotate: Add base support for bpf_image Jiri Olsa
2020-02-27  5:54   ` Song Liu
2020-02-28 13:16   ` Arnaldo Carvalho de Melo
  -- strict thread matches above, loose matches on Subject: below --
2020-02-16 19:29 [PATCHv2 00/18] bpf: Add trampoline and dispatcher to /proc/kallsyms Jiri Olsa
2020-02-16 19:29 ` [PATCH 10/18] bpf: Re-initialize lnode in bpf_ksym_del 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=20200227195034.jq76twzwxdlfcwpd@ast-mbp \
    --to=alexei.starovoitov@gmail.com \
    --cc=acme@redhat.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.