From: Segher Boessenkool <segher@kernel.crashing.org>
To: Marco Elver <elver@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
Alexander Monakov <amonakov@ispras.ru>,
Linus Torvalds <torvalds@linux-foundation.org>,
Jakub Jelinek <jakub@redhat.com>,
Alan Stern <stern@rowland.harvard.edu>,
Will Deacon <will@kernel.org>,
Andrea Parri <parri.andrea@gmail.com>,
Boqun Feng <boqun.feng@gmail.com>,
Nick Piggin <npiggin@gmail.com>,
David Howells <dhowells@redhat.com>,
Jade Alglave <j.alglave@ucl.ac.uk>,
Luc Maranget <luc.maranget@inria.fr>,
Akira Yokosawa <akiyks@gmail.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-toolchains@vger.kernel.org,
linux-arch <linux-arch@vger.kernel.org>
Subject: Re: [RFC] LKMM: Add volatile_if()
Date: Wed, 9 Jun 2021 12:14:19 -0500 [thread overview]
Message-ID: <20210609171419.GI18427@gate.crashing.org> (raw)
In-Reply-To: <CANpmjNPq3NBhi_pFpNd6TwXOVjw0LE2NuQ63dWZrYSfEet3ChQ@mail.gmail.com>
On Wed, Jun 09, 2021 at 06:13:00PM +0200, Marco Elver wrote:
> On Wed, 9 Jun 2021 at 17:33, Segher Boessenkool
> <segher@kernel.crashing.org> wrote:
> [...]
> > > An alternative design would be to use a statement attribute to only
> > > enforce (C) ("__attribute__((mustcontrol))" ?).
> >
> > Statement attributes only exist for empty statements. It is unclear how
> > (and if!) we could support it for general statements.
>
> Statement attributes can apply to anything -- Clang has had them apply
> to non-empty statements for a while.
First off, it is not GCC's problem if LLVM decides to use a GCC
extension in some non-compatible way.
It might be possible to extend statement attributes to arbitrary
statement expressions, or some subset of statement expressions, but that
then has to be written down as well; it isn't obvious at all what this
woould do.
> In fact, since C++20 [3], GCC will have to support statement
> attributes on non-empty statements, so presumably the parsing logic
> should already be there.
> [3] https://en.cppreference.com/w/cpp/language/attributes/likely
C++ attributes have different syntax *and semantics*. With GCC
attributes it isn't clear what statement something belongs to (a
statement can contain a statement after all).
C++ requires all unknown attributes to be ignored without error, so can
this be useful at all here?
> > Some new builtin seems to fit the requirements better? I haven't looked
> > too closely though.
>
> I had a longer discussion with someone offline about it, and the
> problem with a builtin is similar to the "memory_order_consume
> implementation problem" -- you might have an expression that uses the
> builtin in some function without any control, and merely returns the
> result of the expression as a result. If that function is in another
> compilation unit, it then becomes difficult to propagate this
> information without somehow making it part of the type system.
> Therefore, by using a statement attribute on conditional control
> statements, we do not even have this problem. It seems cleaner
> syntactically than having a __builtin_() that is either approximate,
> or gives an error if used in the wrong context.
You would use the builtin to mark exactly where you are making the
control dependency.
(And what is a "conditional control statement"? Yes of course I can
imagine things, but that is not good enough at all).
> Hence the suggestion for a very simple attribute, which also
> side-steps this problem.
And introduces many more problems :-(
Segher
next prev parent reply other threads:[~2021-06-09 17:19 UTC|newest]
Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-04 10:12 [RFC] LKMM: Add volatile_if() Peter Zijlstra
2021-06-04 10:44 ` Will Deacon
2021-06-04 11:13 ` Will Deacon
2021-06-04 11:31 ` Peter Zijlstra
2021-06-04 13:44 ` Will Deacon
2021-06-04 13:56 ` Peter Zijlstra
2021-06-04 15:13 ` Will Deacon
2021-06-04 15:22 ` Peter Zijlstra
2021-06-04 15:36 ` Alan Stern
2021-06-04 15:42 ` Peter Zijlstra
2021-06-04 15:51 ` Alan Stern
2021-06-04 16:17 ` Peter Zijlstra
2021-06-04 18:27 ` Alan Stern
2021-06-04 19:09 ` Linus Torvalds
2021-06-04 19:18 ` Linus Torvalds
2021-06-04 20:56 ` Paul E. McKenney
2021-06-04 21:27 ` Linus Torvalds
2021-06-04 21:40 ` Paul E. McKenney
2021-06-04 22:19 ` Linus Torvalds
2021-06-05 14:57 ` Alan Stern
2021-06-06 0:14 ` Paul E. McKenney
2021-06-06 1:29 ` Alan Stern
2021-06-06 3:41 ` Linus Torvalds
2021-06-06 4:43 ` Paul E. McKenney
2021-06-06 13:17 ` Segher Boessenkool
2021-06-06 19:07 ` Paul E. McKenney
2021-06-06 12:59 ` Segher Boessenkool
2021-06-06 13:47 ` Alan Stern
2021-06-06 17:13 ` Segher Boessenkool
2021-06-06 18:25 ` Linus Torvalds
2021-06-06 19:19 ` Segher Boessenkool
2021-06-06 18:41 ` Alan Stern
2021-06-06 18:59 ` Jakub Jelinek
2021-06-06 19:15 ` Paul E. McKenney
2021-06-06 19:22 ` Linus Torvalds
2021-06-06 20:11 ` Segher Boessenkool
2021-06-06 21:19 ` Alexander Monakov
2021-06-06 22:38 ` Linus Torvalds
2021-06-06 23:39 ` Rasmus Villemoes
2021-06-06 23:44 ` Rasmus Villemoes
2021-06-07 8:01 ` Alexander Monakov
2021-06-07 8:27 ` Marco Elver
2021-06-07 15:28 ` Paul E. McKenney
2021-06-07 17:04 ` Marco Elver
2021-06-08 9:30 ` Marco Elver
2021-06-08 11:22 ` Peter Zijlstra
2021-06-08 15:28 ` Segher Boessenkool
2021-06-09 12:44 ` Marco Elver
2021-06-09 15:31 ` Segher Boessenkool
2021-06-09 16:13 ` Marco Elver
2021-06-09 17:14 ` Segher Boessenkool [this message]
2021-06-09 17:31 ` Nick Desaulniers
2021-06-09 20:24 ` Segher Boessenkool
2021-06-09 18:25 ` Linus Torvalds
2021-06-07 17:52 ` Segher Boessenkool
2021-06-07 18:07 ` Alexander Monakov
2021-06-07 18:18 ` Segher Boessenkool
2021-06-07 17:42 ` Segher Boessenkool
2021-06-07 20:31 ` Linus Torvalds
2021-06-07 22:54 ` Segher Boessenkool
2021-06-06 11:53 ` Segher Boessenkool
2021-06-06 13:45 ` Alan Stern
2021-06-06 18:04 ` Linus Torvalds
2021-06-06 18:22 ` Alan Stern
2021-06-06 18:43 ` Linus Torvalds
2021-06-07 10:43 ` Peter Zijlstra
2021-06-07 11:52 ` Will Deacon
2021-06-07 15:25 ` Paul E. McKenney
2021-06-07 16:02 ` Will Deacon
2021-06-07 18:08 ` Paul E. McKenney
[not found] ` <20210730172020.GA32396@knuckles.cs.ucl.ac.uk>
2021-07-30 20:35 ` Alan Stern
2021-08-02 21:18 ` Alan Stern
2021-08-02 23:31 ` Paul E. McKenney
2021-08-04 20:09 ` Alan Stern
2021-08-05 19:47 ` Alan Stern
2021-08-07 0:51 ` Alan Stern
2021-06-06 18:40 ` Segher Boessenkool
2021-06-06 18:48 ` Linus Torvalds
2021-06-06 18:53 ` Linus Torvalds
2021-06-06 19:52 ` Segher Boessenkool
2021-06-06 20:11 ` Linus Torvalds
2021-06-06 20:26 ` Segher Boessenkool
2021-06-06 23:37 ` Paul E. McKenney
2021-06-07 14:12 ` Segher Boessenkool
2021-06-07 15:27 ` Paul E. McKenney
2021-06-07 18:23 ` Segher Boessenkool
2021-06-07 19:51 ` Alan Stern
2021-06-07 20:16 ` Paul E. McKenney
2021-06-07 22:40 ` Segher Boessenkool
2021-06-07 23:26 ` Paul E. McKenney
2021-06-07 10:52 ` Peter Zijlstra
2021-06-07 14:16 ` Segher Boessenkool
2021-06-04 22:05 ` Peter Zijlstra
2021-06-05 3:14 ` Alan Stern
2021-06-05 16:24 ` Linus Torvalds
2021-06-04 15:50 ` Segher Boessenkool
2021-06-04 15:47 ` Segher Boessenkool
2021-06-04 11:44 ` Peter Zijlstra
2021-06-04 14:13 ` Paul E. McKenney
2021-06-04 15:35 ` Segher Boessenkool
2021-06-04 16:10 ` Peter Zijlstra
2021-06-04 16:40 ` Segher Boessenkool
2021-06-04 18:55 ` Paul E. McKenney
2021-06-04 19:53 ` Segher Boessenkool
2021-06-04 20:40 ` Paul E. McKenney
2021-06-06 11:36 ` Segher Boessenkool
2021-06-06 19:01 ` Paul E. McKenney
2021-06-04 14:25 ` Alan Stern
2021-06-04 16:09 ` Segher Boessenkool
2021-06-04 16:33 ` Peter Zijlstra
2021-06-04 16:30 ` Linus Torvalds
2021-06-04 16:37 ` Peter Zijlstra
2021-06-04 16:52 ` Segher Boessenkool
2021-06-04 17:10 ` Linus Torvalds
2021-06-04 17:24 ` Segher Boessenkool
2021-06-04 17:38 ` Linus Torvalds
2021-06-04 18:25 ` Segher Boessenkool
2021-06-04 19:17 ` Peter Zijlstra
2021-06-04 20:43 ` Paul E. McKenney
2021-06-04 18:23 ` Alan Stern
2021-06-08 12:48 ` David Laight
2021-09-24 18:38 ` Mathieu Desnoyers
2021-09-24 19:52 ` Alan Stern
2021-09-24 20:22 ` Mathieu Desnoyers
2021-09-24 19:55 ` Segher Boessenkool
2021-09-24 20:39 ` Mathieu Desnoyers
2021-09-24 22:07 ` Mathieu Desnoyers
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=20210609171419.GI18427@gate.crashing.org \
--to=segher@kernel.crashing.org \
--cc=akiyks@gmail.com \
--cc=amonakov@ispras.ru \
--cc=boqun.feng@gmail.com \
--cc=dhowells@redhat.com \
--cc=elver@google.com \
--cc=j.alglave@ucl.ac.uk \
--cc=jakub@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-toolchains@vger.kernel.org \
--cc=luc.maranget@inria.fr \
--cc=npiggin@gmail.com \
--cc=parri.andrea@gmail.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=stern@rowland.harvard.edu \
--cc=torvalds@linux-foundation.org \
--cc=will@kernel.org \
/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).