All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: linux-kernel@vger.kernel.org
Cc: akiyks@gmail.com, boqun.feng@gmail.com, corbet@lwn.net,
	keescook@chromium.org, linux@armlinux.org.uk,
	linux-doc@vger.kernel.org, mark.rutland@arm.com,
	mchehab@kernel.org, paulmck@kernel.org, peterz@infradead.org,
	rdunlap@infradead.org, sstabellini@kernel.org, will@kernel.org
Subject: [PATCH v2 00/27] locking/atomic: restructuring + kerneldoc
Date: Mon,  5 Jun 2023 08:00:57 +0100	[thread overview]
Message-ID: <20230605070124.3741859-1-mark.rutland@arm.com> (raw)

Hi all,

These patches restructure the generated atomic headers, and add
kerneldoc comments for all of the generic atomic{,64,_long}_t
operations.

The core headers now generate raw_atomic*() operations as the
fundamental instrumentation-safe atomics, with the arch_atomic*()
functions being an implementation detail that shouldn't be used
directly.

Each raw_atomic*() op is given a single definition with all related
ifdeffery inside, e.g.

| /**
|  * raw_atomic_inc_return_acquire() - atomic increment with acquire ordering
|  * @v: pointer to atomic_t
|  *
|  * Atomically updates @v to (@v + 1) with acquire ordering.
|  *
|  * Safe to use in noinstr code; prefer atomic_inc_return_acquire() elsewhere.
|  *
|  * Return: the updated value of @v.
|  */
| static __always_inline int
| raw_atomic_inc_return_acquire(atomic_t *v)
| {
| #if defined(arch_atomic_inc_return_acquire)
| 	return arch_atomic_inc_return_acquire(v);
| #elif defined(arch_atomic_inc_return_relaxed)
| 	int ret = arch_atomic_inc_return_relaxed(v);
| 	__atomic_acquire_fence();
| 	return ret;
| #elif defined(arch_atomic_inc_return)
| 	return arch_atomic_inc_return(v);
| #else
| 	return raw_atomic_add_return_acquire(1, v);
| #endif
| }

Similarly, the regular atomic*() ops (which already have a single
definition) are given kerneldoc comments, e.g.

| /**
|  * atomic_inc_return_acquire() - atomic increment with acquire ordering
|  * @v: pointer to atomic_t
|  *
|  * Atomically updates @v to (@v + 1) with acquire ordering.
|  *
|  * Unsafe to use in noinstr code; use raw_atomic_inc_return_acquire() there.
|  *
|  * Return: the updated value of @v.
|  */
| static __always_inline int
| atomic_inc_return_acquire(atomic_t *v)
| {
| 	instrument_atomic_read_write(v, sizeof(*v));
| 	return raw_atomic_inc_return_acquire(v);
| }

The kerneldoc comments themselves are built from templates as with the
fallbacks, which should allow them to be extended in future if necessary.

I've compile-tested this for a number of architectures and
configurations, but as usual this probably needs to see some testing by
build robots.

The patches are based on Peter Zijlstra's queued locking/core branch,
specifically commit:

  bb6e9a06cba6b850 ("s390/cpum_sf: Convert to cmpxchg128()")

Which can be found in the git tree at:

  https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git/

Since v1 [1]:
* Add kernel-doc handling of "~@v"
* Add atomic-instrumented.h to included documentation headers
* Fix typos and punctuation
* Clarify kerneldoc wording

[1] https://lore.kernel.org/lkml/20230522122429.1915021-1-mark.rutland@arm.com/

Thanks,
Mark.

Mark Rutland (26):
  locking/atomic: arm: fix sync ops
  locking/atomic: remove fallback comments
  locking/atomic: hexagon: remove redundant arch_atomic_cmpxchg
  locking/atomic: make atomic*_{cmp,}xchg optional
  locking/atomic: arc: add preprocessor symbols
  locking/atomic: arm: add preprocessor symbols
  locking/atomic: hexagon: add preprocessor symbols
  locking/atomic: m68k: add preprocessor symbols
  locking/atomic: parisc: add preprocessor symbols
  locking/atomic: sh: add preprocessor symbols
  locking/atomic: sparc: add preprocessor symbols
  locking/atomic: x86: add preprocessor symbols
  locking/atomic: xtensa: add preprocessor symbols
  locking/atomic: scripts: remove bogus order parameter
  locking/atomic: scripts: remove leftover "${mult}"
  locking/atomic: scripts: factor out order template generation
  locking/atomic: scripts: add trivial raw_atomic*_<op>()
  locking/atomic: treewide: use raw_atomic*_<op>()
  locking/atomic: scripts: build raw_atomic_long*() directly
  locking/atomic: scripts: restructure fallback ifdeffery
  locking/atomic: scripts: split pfx/name/sfx/order
  locking/atomic: scripts: simplify raw_atomic_long*() definitions
  locking/atomic: scripts: simplify raw_atomic*() definitions
  docs: scripts: kernel-doc: accept bitwise negation like ~@var
  locking/atomic: scripts: generate kerneldoc comments
  locking/atomic: treewide: delete arch_atomic_*() kerneldoc

Paul E. McKenney (1):
  locking/atomic: docs: Add atomic operations to the driver basic API
    documentation

 Documentation/driver-api/basics.rst          |    8 +-
 arch/alpha/include/asm/atomic.h              |   35 -
 arch/arc/include/asm/atomic-spinlock.h       |    9 +
 arch/arc/include/asm/atomic.h                |   24 -
 arch/arc/include/asm/atomic64-arcv2.h        |   19 +-
 arch/arm/include/asm/assembler.h             |   17 +
 arch/arm/include/asm/atomic.h                |   15 +-
 arch/arm/include/asm/sync_bitops.h           |   29 +-
 arch/arm/lib/bitops.h                        |   14 +-
 arch/arm/lib/testchangebit.S                 |    4 +
 arch/arm/lib/testclearbit.S                  |    4 +
 arch/arm/lib/testsetbit.S                    |    4 +
 arch/arm64/include/asm/atomic.h              |   28 -
 arch/csky/include/asm/atomic.h               |   35 -
 arch/hexagon/include/asm/atomic.h            |   69 +-
 arch/ia64/include/asm/atomic.h               |    7 -
 arch/loongarch/include/asm/atomic.h          |   56 -
 arch/m68k/include/asm/atomic.h               |   18 +-
 arch/mips/include/asm/atomic.h               |   11 -
 arch/openrisc/include/asm/atomic.h           |    3 -
 arch/parisc/include/asm/atomic.h             |   27 +-
 arch/powerpc/include/asm/atomic.h            |   24 -
 arch/powerpc/kernel/smp.c                    |   12 +-
 arch/riscv/include/asm/atomic.h              |   72 -
 arch/sh/include/asm/atomic-grb.h             |    9 +
 arch/sh/include/asm/atomic-irq.h             |    9 +
 arch/sh/include/asm/atomic-llsc.h            |    9 +
 arch/sh/include/asm/atomic.h                 |    3 -
 arch/sparc/include/asm/atomic_32.h           |   18 +-
 arch/sparc/include/asm/atomic_64.h           |   29 +-
 arch/x86/include/asm/atomic.h                |   87 -
 arch/x86/include/asm/atomic64_32.h           |   76 -
 arch/x86/include/asm/atomic64_64.h           |   81 -
 arch/x86/include/asm/cmpxchg_64.h            |    4 +
 arch/x86/kernel/alternative.c                |    4 +-
 arch/x86/kernel/cpu/mce/core.c               |   16 +-
 arch/x86/kernel/nmi.c                        |    2 +-
 arch/x86/kernel/pvclock.c                    |    4 +-
 arch/x86/kvm/x86.c                           |    2 +-
 arch/xtensa/include/asm/atomic.h             |   12 +-
 include/asm-generic/atomic.h                 |    3 -
 include/asm-generic/bitops/atomic.h          |   12 +-
 include/asm-generic/bitops/lock.h            |    8 +-
 include/linux/atomic/atomic-arch-fallback.h  | 5200 ++++++++++++------
 include/linux/atomic/atomic-instrumented.h   | 3484 ++++++++++--
 include/linux/atomic/atomic-long.h           | 2122 ++++---
 include/linux/context_tracking.h             |    4 +-
 include/linux/context_tracking_state.h       |    2 +-
 include/linux/cpumask.h                      |    2 +-
 include/linux/jump_label.h                   |    2 +-
 kernel/context_tracking.c                    |   12 +-
 kernel/sched/clock.c                         |    2 +-
 scripts/atomic/atomic-tbl.sh                 |  112 +-
 scripts/atomic/atomics.tbl                   |    2 +-
 scripts/atomic/fallbacks/acquire             |    4 -
 scripts/atomic/fallbacks/add_negative        |   14 +-
 scripts/atomic/fallbacks/add_unless          |   15 +-
 scripts/atomic/fallbacks/andnot              |    6 +-
 scripts/atomic/fallbacks/cmpxchg             |    3 +
 scripts/atomic/fallbacks/dec                 |    6 +-
 scripts/atomic/fallbacks/dec_and_test        |   14 +-
 scripts/atomic/fallbacks/dec_if_positive     |    8 +-
 scripts/atomic/fallbacks/dec_unless_positive |    8 +-
 scripts/atomic/fallbacks/fence               |    4 -
 scripts/atomic/fallbacks/fetch_add_unless    |   17 +-
 scripts/atomic/fallbacks/inc                 |    6 +-
 scripts/atomic/fallbacks/inc_and_test        |   14 +-
 scripts/atomic/fallbacks/inc_not_zero        |   13 +-
 scripts/atomic/fallbacks/inc_unless_negative |    8 +-
 scripts/atomic/fallbacks/read_acquire        |    6 +-
 scripts/atomic/fallbacks/release             |    4 -
 scripts/atomic/fallbacks/set_release         |    6 +-
 scripts/atomic/fallbacks/sub_and_test        |   15 +-
 scripts/atomic/fallbacks/try_cmpxchg         |    6 +-
 scripts/atomic/fallbacks/xchg                |    3 +
 scripts/atomic/gen-atomic-fallback.sh        |  264 +-
 scripts/atomic/gen-atomic-instrumented.sh    |   23 +-
 scripts/atomic/gen-atomic-long.sh            |   38 +-
 scripts/atomic/kerneldoc/add                 |   13 +
 scripts/atomic/kerneldoc/add_negative        |   13 +
 scripts/atomic/kerneldoc/add_unless          |   18 +
 scripts/atomic/kerneldoc/and                 |   13 +
 scripts/atomic/kerneldoc/andnot              |   13 +
 scripts/atomic/kerneldoc/cmpxchg             |   14 +
 scripts/atomic/kerneldoc/dec                 |   12 +
 scripts/atomic/kerneldoc/dec_and_test        |   12 +
 scripts/atomic/kerneldoc/dec_if_positive     |   12 +
 scripts/atomic/kerneldoc/dec_unless_positive |   12 +
 scripts/atomic/kerneldoc/inc                 |   12 +
 scripts/atomic/kerneldoc/inc_and_test        |   12 +
 scripts/atomic/kerneldoc/inc_not_zero        |   12 +
 scripts/atomic/kerneldoc/inc_unless_negative |   12 +
 scripts/atomic/kerneldoc/or                  |   13 +
 scripts/atomic/kerneldoc/read                |   12 +
 scripts/atomic/kerneldoc/set                 |   13 +
 scripts/atomic/kerneldoc/sub                 |   13 +
 scripts/atomic/kerneldoc/sub_and_test        |   13 +
 scripts/atomic/kerneldoc/try_cmpxchg         |   15 +
 scripts/atomic/kerneldoc/xchg                |   13 +
 scripts/atomic/kerneldoc/xor                 |   13 +
 scripts/kernel-doc                           |    2 +-
 101 files changed, 8979 insertions(+), 3689 deletions(-)
 create mode 100755 scripts/atomic/fallbacks/cmpxchg
 create mode 100755 scripts/atomic/fallbacks/xchg
 create mode 100644 scripts/atomic/kerneldoc/add
 create mode 100644 scripts/atomic/kerneldoc/add_negative
 create mode 100644 scripts/atomic/kerneldoc/add_unless
 create mode 100644 scripts/atomic/kerneldoc/and
 create mode 100644 scripts/atomic/kerneldoc/andnot
 create mode 100644 scripts/atomic/kerneldoc/cmpxchg
 create mode 100644 scripts/atomic/kerneldoc/dec
 create mode 100644 scripts/atomic/kerneldoc/dec_and_test
 create mode 100644 scripts/atomic/kerneldoc/dec_if_positive
 create mode 100644 scripts/atomic/kerneldoc/dec_unless_positive
 create mode 100644 scripts/atomic/kerneldoc/inc
 create mode 100644 scripts/atomic/kerneldoc/inc_and_test
 create mode 100644 scripts/atomic/kerneldoc/inc_not_zero
 create mode 100644 scripts/atomic/kerneldoc/inc_unless_negative
 create mode 100644 scripts/atomic/kerneldoc/or
 create mode 100644 scripts/atomic/kerneldoc/read
 create mode 100644 scripts/atomic/kerneldoc/set
 create mode 100644 scripts/atomic/kerneldoc/sub
 create mode 100644 scripts/atomic/kerneldoc/sub_and_test
 create mode 100644 scripts/atomic/kerneldoc/try_cmpxchg
 create mode 100644 scripts/atomic/kerneldoc/xchg
 create mode 100644 scripts/atomic/kerneldoc/xor

-- 
2.30.2


             reply	other threads:[~2023-06-05  7:01 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-05  7:00 Mark Rutland [this message]
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
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=20230605070124.3741859-1-mark.rutland@arm.com \
    --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.