All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: linux-kernel@vger.kernel.org, akiyks@gmail.com,
	boqun.feng@gmail.com, corbet@lwn.net, keescook@chromium.org,
	linux@armlinux.org.uk, linux-doc@vger.kernel.org,
	mchehab@kernel.org, peterz@infradead.org, rdunlap@infradead.org,
	sstabellini@kernel.org, will@kernel.org
Subject: Re: [PATCH v2 25/27] locking/atomic: scripts: generate kerneldoc comments
Date: Fri, 16 Jun 2023 09:57:16 +0100	[thread overview]
Message-ID: <ZIwj7DzwdQUX2L+i@FVFF77S0Q05N> (raw)
In-Reply-To: <9fa47b57-df83-48aa-abb5-763f19f9b3e4@paulmck-laptop>

On Thu, Jun 15, 2023 at 07:07:13AM -0700, Paul E. McKenney wrote:
> On Mon, Jun 05, 2023 at 08:01:22AM +0100, Mark Rutland wrote:
> > Currently the atomics are documented in Documentation/atomic_t.txt, and
> > have no kerneldoc comments. There are a sufficient number of gotchas
> > (e.g. semantics, noinstr-safety) that it would be nice to have comments
> > to call these out, and it would be nice to have kerneldoc comments such
> > that these can be collated.
> > 
> > While it's possible to derive the semantics from the code, this can be
> > painful given the amount of indirection we currently have (e.g. fallback
> > paths), and it's easy to be mislead by naming, e.g.
> > 
> > * The unconditional void-returning ops *only* have relaxed variants
> >   without a _relaxed suffix, and can easily be mistaken for being fully
> >   ordered.
> > 
> >   It would be nice to give these a _relaxed() suffix, but this would
> >   result in significant churn throughout the kernel.
> > 
> > * Our naming of conditional and unconditional+test ops is rather
> >   inconsistent, and it can be difficult to derive the name of an
> >   operation, or to identify where an op is conditional or
> >   unconditional+test.
> > 
> >   Some ops are clearly conditional:
> >   - dec_if_positive
> >   - add_unless
> >   - dec_unless_positive
> >   - inc_unless_negative
> > 
> >   Some ops are clearly unconditional+test:
> >   - sub_and_test
> >   - dec_and_test
> >   - inc_and_test
> > 
> >   However, what exactly those test is not obvious. A _test_zero suffix
> >   might be clearer.
> > 
> >   Others could be read ambiguously:
> >   - inc_not_zero	// conditional
> >   - add_negative	// unconditional+test
> > 
> >   It would probably be worth renaming these, e.g. to inc_unless_zero and
> >   add_test_negative.
> > 
> > As a step towards making this more consistent and easier to understand,
> > this patch adds kerneldoc comments for all generated *atomic*_*()
> > functions. These are generated from templates, with some common text
> > shared, making it easy to extend these in future if necessary.
> > 
> > I've tried to make these as consistent and clear as possible, and I've
> > deliberately ensured:
> > 
> > * All ops have their ordering explicitly mentioned in the short and long
> >   description.
> > 
> > * All test ops have "test" in their short description.
> > 
> > * All ops are described as an expression using their usual C operator.
> >   For example:
> > 
> >   andnot: "Atomically updates @v to (@v & ~@i)"
> >   inc:    "Atomically updates @v to (@v + 1)"
> > 
> >   Which may be clearer to non-naative English speakers, and allows all
> >   the operations to be described in the same style.
> > 
> > * All conditional ops have their condition described as an expression
> >   using the usual C operators. For example:
> > 
> >   add_unless: "If (@v != @u), atomically updates @v to (@v + @i)"
> >   cmpxchg:    "If (@v == @old), atomically updates @v to @new"
> > 
> >   Which may be clearer to non-naative English speakers, and allows all
> >   the operations to be described in the same style.
> > 
> > * All bitwise ops (and,andnot,or,xor) explicitly mention that they are
> >   bitwise in their short description, so that they are not mistaken for
> >   performing their logical equivalents.
> > 
> > * The noinstr safety of each op is explicitly described, with a
> >   description of whether or not to use the raw_ form of the op.
> > 
> > There should be no functional change as a result of this patch.
> > 
> > Reported-by: Paul E. McKenney <paulmck@kernel.org>
> > Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> > Reviewed-by: Kees Cook <keescook@chromium.org>
> > Cc: Boqun Feng <boqun.feng@gmail.com>
> > Cc: Jonathan Corbet <corbet@lwn.net>
> > Cc: Peter Zijlstra <peterz@infradead.org>
> > Cc: Will Deacon <will@kernel.org>
> 
> With the dec_if_positive fix:
> 
> Reviewed-by: Paul E. McKenney <paulmck@kernel.org>

Thanks! This is already queued in the tip tree's locking/core branch:

  https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/log/?h=locking/core

... so I was assuming that the dec_if_positive patch would be picked up atop
that.

Regardless, thanks for checking I hadn't missed anything else here! :)

Mark.

  reply	other threads:[~2023-06-16  8:57 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-05  7:00 [PATCH v2 00/27] locking/atomic: restructuring + kerneldoc Mark Rutland
2023-06-05  7:00 ` [PATCH v2 01/27] locking/atomic: arm: fix sync ops Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:00 ` [PATCH v2 02/27] locking/atomic: remove fallback comments Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 03/27] locking/atomic: hexagon: remove redundant arch_atomic_cmpxchg Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 04/27] locking/atomic: make atomic*_{cmp,}xchg optional Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-27 17:07   ` [PATCH v2 04/27] " Guenter Roeck
2023-06-28 11:42     ` Mark Rutland
2023-07-08 13:07     ` Linux regression tracking (Thorsten Leemhuis)
2023-07-08 13:20       ` Guenter Roeck
2023-07-08 13:37         ` Linux regression tracking (Thorsten Leemhuis)
2023-07-15 12:03           ` Linux regression tracking #update (Thorsten Leemhuis)
2023-06-05  7:01 ` [PATCH v2 05/27] locking/atomic: arc: add preprocessor symbols Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 06/27] locking/atomic: arm: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 07/27] locking/atomic: hexagon: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 08/27] locking/atomic: m68k: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 09/27] locking/atomic: parisc: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 10/27] locking/atomic: sh: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 11/27] locking/atomic: sparc: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 12/27] locking/atomic: x86: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 13/27] locking/atomic: xtensa: " Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 14/27] locking/atomic: scripts: remove bogus order parameter Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 15/27] locking/atomic: scripts: remove leftover "${mult}" Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 16/27] locking/atomic: scripts: factor out order template generation Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 17/27] locking/atomic: scripts: add trivial raw_atomic*_<op>() Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 18/27] locking/atomic: treewide: use raw_atomic*_<op>() Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 19/27] locking/atomic: scripts: build raw_atomic_long*() directly Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 20/27] locking/atomic: scripts: restructure fallback ifdeffery Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 21/27] locking/atomic: scripts: split pfx/name/sfx/order Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 22/27] locking/atomic: scripts: simplify raw_atomic_long*() definitions Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 23/27] locking/atomic: scripts: simplify raw_atomic*() definitions Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 24/27] docs: scripts: kernel-doc: accept bitwise negation like ~@var Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-05  7:01 ` [PATCH v2 25/27] locking/atomic: scripts: generate kerneldoc comments Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland
2023-06-15 14:07   ` [PATCH v2 25/27] " Paul E. McKenney
2023-06-16  8:57     ` Mark Rutland [this message]
2023-06-05  7:01 ` [PATCH v2 26/27] locking/atomic: docs: Add atomic operations to the driver basic API documentation Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Paul E. McKenney
2023-06-05  7:01 ` [PATCH v2 27/27] locking/atomic: treewide: delete arch_atomic_*() kerneldoc Mark Rutland
2023-06-06  8:26   ` [tip: locking/core] " tip-bot2 for Mark Rutland

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=ZIwj7DzwdQUX2L+i@FVFF77S0Q05N \
    --to=mark.rutland@arm.com \
    --cc=akiyks@gmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=corbet@lwn.net \
    --cc=keescook@chromium.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mchehab@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=sstabellini@kernel.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 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.