From: Will Deacon <will.deacon@arm.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
David Miller <davem@davemloft.net>,
daniel@iogearbox.net, arnd@arndb.de, yang.shi@linaro.org,
linaro-kernel@lists.linaro.org, eric.dumazet@gmail.com,
zlim.lnx@gmail.com, ast@kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, xi.wang@gmail.com,
catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org,
yhs@plumgrid.com, bblanco@plumgrid.com
Subject: Re: [PATCH 2/2] arm64: bpf: add BPF XADD instruction
Date: Wed, 11 Nov 2015 18:46:54 +0000 [thread overview]
Message-ID: <20151111184654.GQ9562@arm.com> (raw)
In-Reply-To: <20151111181132.GA90947@ast-mbp.thefacebook.com>
On Wed, Nov 11, 2015 at 10:11:33AM -0800, Alexei Starovoitov wrote:
> On Wed, Nov 11, 2015 at 06:57:41PM +0100, Peter Zijlstra wrote:
> > On Wed, Nov 11, 2015 at 12:35:48PM -0500, David Miller wrote:
> > > From: Alexei Starovoitov <alexei.starovoitov@gmail.com>
> > > Date: Wed, 11 Nov 2015 09:27:00 -0800
> > >
> > > > BPF_XADD == atomic_add() in kernel. period.
> > > > we are not going to deprecate it or introduce something else.
> > >
> > > Agreed, it makes no sense to try and tie C99 or whatever atomic
> > > semantics to something that is already clearly defined to have
> > > exactly kernel atomic_add() semantics.
> >
> > Dave, this really doesn't make any sense to me. __sync primitives have
> > well defined semantics and (e)BPF is violating this.
>
> bpf_xadd was never meant to be __sync_fetch_and_add equivalent.
> From the day one it meant to be atomic_add() as kernel does it.
> I did piggy back on __sync in the llvm backend because it was the quick
> and dirty way to move forward.
> In retrospect I should have introduced a clean intrinstic for that instead,
> but it's not too late to do it now. user space we can change at any time
> unlike kernel.
But it's not just "user space", it's the source language definition!
I also don't see how you can change it now, without simply rejecting
the __sync primitives outright.
> > Furthermore, the fetch_and_add (or XADD) name has well defined
> > semantics, which (e)BPF also violates.
>
> bpf_xadd also didn't meant to be 'fetch'. It was void return from the beginning.
Right, so it's just a misnomer.
> > Atomicy is hard enough as it is, backends giving random interpretations
> > to them isn't helping anybody.
>
> no randomness. bpf_xadd == atomic_add() in kernel.
> imo that is the simplest and cleanest intepretantion one can have, no?
I don't really mind, as long as there is a semantic that everybody agrees
on. Really, I just want this to be consistent because memory models are
a PITA enough without having multiple interpretations flying around.
> > It also baffles me that Alexei is seemingly unwilling to change/rev the
> > (e)BPF instructions, which would be invisible to the regular user, he
> > does want to change the language itself, which will impact all
> > 'scripts'.
>
> well, we cannot change it in kernel because it's ABI.
> I'm not against adding new insns. We definitely can, but let's figure out why?
> Is anything broken? No. So what new insns make sense?
If you end up needing a suite of atomics, I would suggest the __atomic
builtins because they are likely to be more portable and more flexible
than trying to use the kernel memory model outside of the environment
for which it was developed. However, I agree with you that we can cross
that bridge when we get there.
> Adding new intrinsic to llvm is not a big deal. I'll add it as soon
> as I have time to work on it or if somebody beats me to it I would be
> glad to test it and apply it.
I'm more interested in what you do about the existing intrinsic. Anyway,
I'll raise a ticket against LLVM so that they're aware (and maybe
somebody else will fix it :).
Will
next prev parent reply other threads:[~2015-11-11 18:46 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-10 22:41 [PATCH 0/2] arm64: bpf: add BPF_ST and BPF_XADD instructions support Yang Shi
2015-11-10 22:41 ` [PATCH 1/2] arm64: bpf: add 'store immediate' instruction Yang Shi
2015-11-11 2:45 ` Z Lim
2015-11-11 12:12 ` Will Deacon
2015-11-11 12:39 ` Will Deacon
2015-11-12 19:33 ` Shi, Yang
2015-11-13 3:45 ` Z Lim
2015-11-23 19:34 ` Shi, Yang
2015-11-10 22:41 ` [PATCH 2/2] arm64: bpf: add BPF XADD instruction Yang Shi
2015-11-11 0:08 ` Eric Dumazet
2015-11-11 0:26 ` Shi, Yang
2015-11-11 0:42 ` Alexei Starovoitov
2015-11-11 2:52 ` Z Lim
2015-11-11 8:49 ` Arnd Bergmann
2015-11-11 10:24 ` Will Deacon
2015-11-11 10:42 ` Daniel Borkmann
2015-11-11 11:58 ` Will Deacon
2015-11-11 12:21 ` Daniel Borkmann
2015-11-11 12:38 ` Will Deacon
2015-11-11 12:58 ` Peter Zijlstra
2015-11-11 15:52 ` Daniel Borkmann
2015-11-11 16:23 ` Will Deacon
2015-11-11 17:27 ` Alexei Starovoitov
2015-11-11 17:35 ` David Miller
2015-11-11 17:44 ` Will Deacon
2015-11-11 19:01 ` David Miller
2015-11-11 17:57 ` Peter Zijlstra
2015-11-11 18:11 ` Alexei Starovoitov
2015-11-11 18:31 ` Peter Zijlstra
2015-11-11 18:41 ` Peter Zijlstra
2015-11-11 18:44 ` Peter Zijlstra
2015-11-11 18:54 ` Peter Zijlstra
2015-11-11 19:55 ` Alexei Starovoitov
2015-11-11 22:21 ` Peter Zijlstra
2015-11-11 23:40 ` Alexei Starovoitov
2015-11-12 8:57 ` Peter Zijlstra
2015-11-11 18:50 ` Daniel Borkmann
2015-11-11 19:04 ` David Miller
2015-11-11 19:23 ` Peter Zijlstra
2015-11-11 19:41 ` Daniel Borkmann
2015-11-11 18:46 ` Will Deacon [this message]
2015-11-11 19:01 ` David Miller
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=20151111184654.GQ9562@arm.com \
--to=will.deacon@arm.com \
--cc=alexei.starovoitov@gmail.com \
--cc=arnd@arndb.de \
--cc=ast@kernel.org \
--cc=bblanco@plumgrid.com \
--cc=catalin.marinas@arm.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=xi.wang@gmail.com \
--cc=yang.shi@linaro.org \
--cc=yhs@plumgrid.com \
--cc=zlim.lnx@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).