From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Daniel Borkmann <daniel@iogearbox.net>
Cc: Yonghong Song <yhs@fb.com>,
"bpf@vger.kernel.org" <bpf@vger.kernel.org>,
Alexei Starovoitov <ast@kernel.org>, Martin Lau <kafai@fb.com>,
Song Liu <songliubraving@fb.com>,
"tglx@linutronix.de" <tglx@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH 1/3] bpf: Use spinlock_t in bpf_lru_list
Date: Wed, 10 Apr 2019 19:44:44 +0200 [thread overview]
Message-ID: <20190410174444.26ebmnwpsiw6eicz@linutronix.de> (raw)
In-Reply-To: <4150a0db-18f9-aa93-cdb4-8cf047093740@iogearbox.net>
On 2019-04-10 19:19:27 [+0200], Daniel Borkmann wrote:
> On 04/10/2019 07:08 PM, Yonghong Song wrote:
> > On 4/10/19 7:30 AM, Sebastian Andrzej Siewior wrote:
> >> There is no difference between spinlock_t and raw_spinlock_t for !RT
> >> kernels. It is possible that bpf_lru_list_pop_free_to_local() invokes
> >> at least three list walks which look unbounded it probably makes sense
> >> to use spinlock_t.
> >>
> >> Make bpf_lru_list use a spinlock_t.
> >
> > Could you add a cover letter for the patch set since you have
> > more than one patch?
yes.
> >> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> >> ---
> >> kernel/bpf/bpf_lru_list.c | 38 +++++++++++++++++++-------------------
> >> kernel/bpf/bpf_lru_list.h | 4 ++--
> >> 2 files changed, 21 insertions(+), 21 deletions(-)
> >>
> >> diff --git a/kernel/bpf/bpf_lru_list.c b/kernel/bpf/bpf_lru_list.c
> >> index e6ef4401a1380..40f47210c3817 100644
> >> --- a/kernel/bpf/bpf_lru_list.c
> >> +++ b/kernel/bpf/bpf_lru_list.c
> >> @@ -313,9 +313,9 @@ static void bpf_lru_list_push_free(struct bpf_lru_list *l,
> >> if (WARN_ON_ONCE(IS_LOCAL_LIST_TYPE(node->type)))
> >> return;
> >>
> >> - raw_spin_lock_irqsave(&l->lock, flags);
> >> + spin_lock_irqsave(&l->lock, flags);
> >> __bpf_lru_node_move(l, node, BPF_LRU_LIST_T_FREE);
> >> - raw_spin_unlock_irqrestore(&l->lock, flags);
> >> + spin_unlock_irqrestore(&l->lock, flags);
> >> }
> >
> > This function (plus many others) is called by bpf program helpers which
> > cannot sleep. Is it possible that under RT spin_lock_irqsave() could
> > sleep and this will make bpf subsystem cannot be used under RT?
>
> Back then in ac00881f9221 ("bpf: convert hashtab lock to raw lock")
> Yang Shi converted spinlock_t to raw_spinlock_t due to exactly the
> above mentioned issue. I presume that hasn't changed, right?
Ah. I checked one or two of those and it looked like it was raw since
the beginning. Anyway, it would be nice to Cc: the RT developer while
fiddling with something that only concerns RT.
That usage pattern that is mentioned in ac00881f9221, is it true for all
data structure algorithms? In bpf_lru_list I was concerned about the
list loops. However hashtab and lpm_trie may perform memory allocations
while holding the lock and this isn't going to work.
Sebastian
next prev parent reply other threads:[~2019-04-10 17:44 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-10 14:30 [PATCH 1/3] bpf: Use spinlock_t in bpf_lru_list Sebastian Andrzej Siewior
2019-04-10 14:30 ` [PATCH 2/3] bpf: Use spinlock_t in hashtab Sebastian Andrzej Siewior
2019-04-10 14:30 ` [PATCH 3/3] bpf: Use spinlock_t in lpm_trie Sebastian Andrzej Siewior
2019-04-11 20:36 ` Song Liu
2019-04-12 16:23 ` Sebastian Andrzej Siewior
2019-04-10 17:08 ` [PATCH 1/3] bpf: Use spinlock_t in bpf_lru_list Yonghong Song
2019-04-10 17:19 ` Daniel Borkmann
2019-04-10 17:44 ` Sebastian Andrzej Siewior [this message]
2019-04-10 18:35 ` Yonghong Song
2019-04-12 15:38 ` Sebastian Andrzej Siewior
2019-04-10 19:44 ` Daniel Borkmann
2019-04-12 16:14 ` Sebastian Andrzej Siewior
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=20190410174444.26ebmnwpsiw6eicz@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kafai@fb.com \
--cc=rostedt@goodmis.org \
--cc=songliubraving@fb.com \
--cc=tglx@linutronix.de \
--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.