All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv4 00/18] atomics: API cleanups
@ 2018-06-21 12:13 Mark Rutland
  2018-06-21 12:13 ` [PATCHv4 01/18] atomics/treewide: s/__atomic_add_unless/atomic_fetch_add_unless/ Mark Rutland
                   ` (17 more replies)
  0 siblings, 18 replies; 21+ messages in thread
From: Mark Rutland @ 2018-06-21 12:13 UTC (permalink / raw)
  To: mingo, will.deacon, peterz, linux-kernel
  Cc: Mark Rutland, albert, arnd, benh, boqun.feng, geert, ink, linux,
	mattst88, mpe, palmer, paulus, rth, vgupta

This series contains a few cleanups of the atomic API, fixing
inconsistencies between atomic_* and atomic64_*, and minimizing
repetition in arch code. This is nicer for arch code, and the improved
regularity will help when generating the atomic headers in future.

Since v1 [1]:
* Add missing inc_not_zero #define for x86_32
* Remove newly redundant test op definitions for riscv
* Remove atomic_inc_not_zero_hint()
* Make inc/dec ops optional

Since v2 [2]:
* Make test ops return bool
* Clean up ifdeffery for andnot opes
* Update comments for clarity
* Rebase to v4.18-rc1
* Accumulate acks
* Fix typos

Since v3 [3]:
* Fix return type of atomic64_fetch_add_unless() for alpha
* Fix return type of atomic64_fetch_add_unless() for instrumentation
* Fix more typos

The bulk of the patches reorganise things so architectures consistently
provide <atomic>_fetch_add_unless(), with atomic_fetch_add_unless()
provided as a wrapper by core code. A generic fallback is provided for
<atomic>_fetch_add_unless(), based on <atomic>_read() and
<atomic>_try_cmpxchg().

Other patches in the series add common fallbacks for:

* atomic64_inc_not_zero() 
* <atomic>_inc_and_test()
* <atomic>_dec_and_test()
* <atomic>_sub_and_test()
* <atomic>add_negative()
* <atomic>_*inc*()
* <atomic>_*dec*()

... as almost all architectures provide (near-)identical implementation
of these today. Where an architecture provides a non-trivial definition,
it is updated to provide a matching preprocessor symbol, and the
instrumented atomics are updated correspondingly.

The end result is a strongly negative diffstat, though <linux/atomic.h>
grows by a reasonable amount. We could halve this in future by
templating the various fallbacks for atomic{,64}_t with code generation.

I've pushed this out to my atomics/api-cleanup branch [4] on kernel.org.

Thanks,
Mark.

[1] https://lkml.kernel.org/r/20180523133533.1076-1-mark.rutland@arm.com
[2] https://lkml.kernel.org/r/20180529154346.3168-1-mark.rutland@arm.com
[3] https://lkml.kernel.org/r/20180618101919.51973-1-mark.rutland@arm.com
[4] git://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git atomics/api-cleanup

Mark Rutland (18):
  atomics/treewide: s/__atomic_add_unless/atomic_fetch_add_unless/
  atomics/treewide: remove redundant atomic_inc_not_zero() definitions
  atomics/treewide: remove atomic_inc_not_zero_hint()
  atomics: make conditional ops return bool
  atomics/treewide: make atomic64_inc_not_zero() optional
  atomics/treewide: make atomic_fetch_add_unless() optional
  atomics: prepare for atomic64_fetch_add_unless()
  atomics/generic: define atomic64_fetch_add_unless()
  atomics/alpha: define atomic64_fetch_add_unless()
  atomics/arc: define atomic64_fetch_add_unless()
  atomics/arm: define atomic64_fetch_add_unless()
  atomics/powerpc: define atomic64_fetch_add_unless()
  atomics/riscv: define atomic64_fetch_add_unless()
  atomics/treewide: make atomic64_fetch_add_unless() optional
  atomics/treewide: make test ops optional
  atomics/treewide: make unconditional inc/dec ops optional
  atomics/treewide: make conditional inc/dec ops optional
  atomics/treewide: clean up andnot ifdeffery

 arch/alpha/include/asm/atomic.h           |  56 ++--
 arch/arc/include/asm/atomic.h             |  86 ++-----
 arch/arm/include/asm/atomic.h             |  55 +---
 arch/arm64/include/asm/atomic.h           |  47 +---
 arch/h8300/include/asm/atomic.h           |  15 +-
 arch/hexagon/include/asm/atomic.h         |  18 +-
 arch/ia64/include/asm/atomic.h            |  81 ------
 arch/m68k/include/asm/atomic.h            |  24 +-
 arch/mips/include/asm/atomic.h            | 172 -------------
 arch/openrisc/include/asm/atomic.h        |   4 +-
 arch/parisc/include/asm/atomic.h          | 107 --------
 arch/powerpc/include/asm/atomic.h         |  52 ++--
 arch/riscv/include/asm/atomic.h           | 149 +----------
 arch/s390/include/asm/atomic.h            |  65 -----
 arch/sh/include/asm/atomic.h              |  35 ---
 arch/sparc/include/asm/atomic_32.h        |  24 +-
 arch/sparc/include/asm/atomic_64.h        |  65 +----
 arch/sparc/lib/atomic32.c                 |   4 +-
 arch/x86/include/asm/atomic.h             |  30 +--
 arch/x86/include/asm/atomic64_32.h        |  61 +----
 arch/x86/include/asm/atomic64_64.h        |  48 +---
 arch/xtensa/include/asm/atomic.h          |  98 -------
 drivers/block/rbd.c                       |   2 +-
 drivers/infiniband/core/rdma_core.c       |   2 +-
 fs/afs/rxrpc.c                            |   2 +-
 include/asm-generic/atomic-instrumented.h |  71 ++++-
 include/asm-generic/atomic.h              |  33 ---
 include/asm-generic/atomic64.h            |  15 +-
 include/linux/atomic.h                    | 415 +++++++++++++++++++++++-------
 kernel/bpf/syscall.c                      |   4 +-
 lib/atomic64.c                            |  12 +-
 net/atm/pppoatm.c                         |   2 +-
 net/rxrpc/call_object.c                   |   2 +-
 net/rxrpc/conn_object.c                   |   4 +-
 net/rxrpc/local_object.c                  |   2 +-
 net/rxrpc/peer_object.c                   |   2 +-
 36 files changed, 511 insertions(+), 1353 deletions(-)

-- 
2.11.0


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2018-06-21 12:26 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-21 12:13 [PATCHv4 00/18] atomics: API cleanups Mark Rutland
2018-06-21 12:13 ` [PATCHv4 01/18] atomics/treewide: s/__atomic_add_unless/atomic_fetch_add_unless/ Mark Rutland
2018-06-21 12:13 ` [PATCHv4 02/18] atomics/treewide: remove redundant atomic_inc_not_zero() definitions Mark Rutland
2018-06-21 12:13 ` [PATCHv4 03/18] atomics/treewide: remove atomic_inc_not_zero_hint() Mark Rutland
2018-06-21 12:13 ` [PATCHv4 04/18] atomics: make conditional ops return bool Mark Rutland
2018-06-21 12:13 ` [PATCHv4 05/18] atomics/treewide: make atomic64_inc_not_zero() optional Mark Rutland
2018-06-21 12:13 ` [PATCHv4 06/18] atomics/treewide: make atomic_fetch_add_unless() optional Mark Rutland
2018-06-21 12:13 ` [PATCHv4 07/18] atomics: prepare for atomic64_fetch_add_unless() Mark Rutland
2018-06-21 12:13 ` [PATCHv4 08/18] atomics/generic: define atomic64_fetch_add_unless() Mark Rutland
2018-06-21 12:21   ` Mark Rutland
2018-06-21 12:26     ` Ingo Molnar
2018-06-21 12:13 ` [PATCHv4 09/18] atomics/alpha: " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 10/18] atomics/arc: " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 11/18] atomics/arm: " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 12/18] atomics/powerpc: " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 13/18] atomics/riscv: " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 14/18] atomics/treewide: make atomic64_fetch_add_unless() optional Mark Rutland
2018-06-21 12:13 ` [PATCHv4 15/18] atomics/treewide: make test ops optional Mark Rutland
2018-06-21 12:13 ` [PATCHv4 16/18] atomics/treewide: make unconditional inc/dec " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 17/18] atomics/treewide: make conditional " Mark Rutland
2018-06-21 12:13 ` [PATCHv4 18/18] atomics/treewide: clean up andnot ifdeffery Mark Rutland

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.