From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 00/12] atomics: generate atomic headers / instrument arm64
Date: Thu, 5 Jul 2018 17:40:41 +0100 [thread overview]
Message-ID: <20180705164053.10073-1-mark.rutland@arm.com> (raw)
This series scripts the generation of the various atomic headers, to ensure
that the various atomic APIs remain consistent, reducing the risk of human
error, and simplifying future rework. This fleshes out the instrumented atomics
such that arm64 can be migrated over to them.
Since v1 [1]:
* Use 'p' instead of 'I' for pointer to base int type
* Use Peter's patch for ldsem
* Rename atomic acquire/release barriers
* Handle xchg/cmpxchg variants
* Typo fixes
* Migrate arm64 to instrumented atomics
Since v2 [2]:
* Drop undefs for __atomic_*_fence()
* Rename __atomic_{pre,post}_fence => __atomic_{pre,post}_full_fence()
* Restore atomic_long_cond_read_relaxed()
* Add Kbuild step to verify atomic headers are up-to-date
* Rework arm64 atomic naming
* Commit message cleanups
* Accumulate acks
The series is based on my atomic API cleanup patches [3], which have been
queued in the tip locking/core branch.
The first six patches clean up some issues with the existing atomic
instrumentation, with patch six introducing the header generation
infrastructure. The subsequent three patches migrate to each generated header
in turn, with the final patch moving arm64 over to the instrumented atomics.
The scripts themselves are mostly POSIX sh (modulo local), without bashisms,
and work in dash and bash.
Per Linus request that it is possible to use git grep to inspect the atomic
headers [3], the headers are committed (and not generated by kbuild). Since we
now expand the fallback definitions inline, each *should* be easier to find
with grep. Each header also has a comment at the top with a path to the script
used to generate it.
While the diff stat looks like a huge addition, the majority of this is
generated by the scripts added by this series. The patches remove ~1700 lines
of hand-written boilerplate code, replacing this with ~900 lines of script,
which generate
That scripting comes to ~900 lines, and replaces ~1700 lines of hand-written
boilerplate with ~4700 lines of generated code. Some of that increase in line
count is due to filling in missing portions of the API (e.g. adding all the
ordering variants to the instrumented atomics), while some of that is due to
expanding fallbacks in place, and consistently spreading these across multiple
lines.
I've build-tested this for x86_64 and arm64 (with and without LSE), and given
this some basic boot testing on an Arm Juno platform.
I've pushed the series out to my atomics/generated branch [4], based atop of
tip locking/core.
Thanks,
Mark.
[1] https://lkml.kernel.org/r/20180529180746.29684-1-mark.rutland at arm.com
[2] https://lkml.kernel.org/r/20180625105952.3756-1-mark.rutland at arm.com
[3] https://lkml.kernel.org/r/20180621121321.4761-1-mark.rutland at arm.com
[4] git://git.kernel.org/pub/scm/linux/kernel/git/mark/linux.git atomics/generated
Mark Rutland (11):
atomics/x86: reduce arch_cmpxchg64*() instrumentation
atomics: simplify cmpxchg() instrumentation
atomics/treewide: instrument xchg()
atomics: instrument cmpxchg_double*()
atomics/treewide: rework ordering barriers
atomics: add common header generation files
atomics: switch to generated fallbacks
atomics: switch to generated atomic-long
atomics: switch to generated instrumentation
atomics: check generated headers are up-to-date
arm64: use instrumented atomics
Peter Zijlstra (1):
atomic/tty: Fix up atomic abuse in ldsem
Kbuild | 18 +-
MAINTAINERS | 1 +
arch/alpha/include/asm/atomic.h | 8 +-
arch/arm64/include/asm/atomic.h | 237 +--
arch/arm64/include/asm/atomic_ll_sc.h | 28 +-
arch/arm64/include/asm/atomic_lse.h | 38 +-
arch/arm64/include/asm/cmpxchg.h | 60 +-
arch/arm64/include/asm/sync_bitops.h | 16 +-
arch/powerpc/include/asm/atomic.h | 17 +-
arch/riscv/include/asm/atomic.h | 17 +-
arch/x86/include/asm/atomic.h | 2 +-
arch/x86/include/asm/atomic64_64.h | 2 +-
arch/x86/include/asm/cmpxchg.h | 2 +-
arch/x86/include/asm/cmpxchg_64.h | 4 +-
drivers/tty/tty_ldsem.c | 82 +-
include/asm-generic/atomic-instrumented.h | 1770 +++++++++++++++++---
include/asm-generic/atomic-long.h | 1173 ++++++++++---
include/linux/atomic-fallback.h | 2294 ++++++++++++++++++++++++++
include/linux/atomic.h | 1279 +-------------
include/linux/tty_ldisc.h | 4 +-
scripts/atomic/atomic-tbl.sh | 186 +++
scripts/atomic/atomics.tbl | 41 +
scripts/atomic/check-atomics.sh | 19 +
scripts/atomic/fallbacks/acquire | 9 +
scripts/atomic/fallbacks/add_negative | 16 +
scripts/atomic/fallbacks/add_unless | 16 +
scripts/atomic/fallbacks/andnot | 7 +
scripts/atomic/fallbacks/dec | 7 +
scripts/atomic/fallbacks/dec_and_test | 15 +
scripts/atomic/fallbacks/dec_if_positive | 15 +
scripts/atomic/fallbacks/dec_unless_positive | 14 +
scripts/atomic/fallbacks/fence | 11 +
scripts/atomic/fallbacks/fetch_add_unless | 23 +
scripts/atomic/fallbacks/inc | 7 +
scripts/atomic/fallbacks/inc_and_test | 15 +
scripts/atomic/fallbacks/inc_not_zero | 14 +
scripts/atomic/fallbacks/inc_unless_negative | 14 +
scripts/atomic/fallbacks/read_acquire | 7 +
scripts/atomic/fallbacks/release | 8 +
scripts/atomic/fallbacks/set_release | 7 +
scripts/atomic/fallbacks/sub_and_test | 16 +
scripts/atomic/fallbacks/try_cmpxchg | 11 +
scripts/atomic/gen-atomic-fallback.sh | 181 ++
scripts/atomic/gen-atomic-instrumented.sh | 182 ++
scripts/atomic/gen-atomic-long.sh | 101 ++
45 files changed, 5994 insertions(+), 2000 deletions(-)
create mode 100644 include/linux/atomic-fallback.h
create mode 100755 scripts/atomic/atomic-tbl.sh
create mode 100644 scripts/atomic/atomics.tbl
create mode 100755 scripts/atomic/check-atomics.sh
create mode 100644 scripts/atomic/fallbacks/acquire
create mode 100644 scripts/atomic/fallbacks/add_negative
create mode 100644 scripts/atomic/fallbacks/add_unless
create mode 100644 scripts/atomic/fallbacks/andnot
create mode 100644 scripts/atomic/fallbacks/dec
create mode 100644 scripts/atomic/fallbacks/dec_and_test
create mode 100644 scripts/atomic/fallbacks/dec_if_positive
create mode 100644 scripts/atomic/fallbacks/dec_unless_positive
create mode 100644 scripts/atomic/fallbacks/fence
create mode 100644 scripts/atomic/fallbacks/fetch_add_unless
create mode 100644 scripts/atomic/fallbacks/inc
create mode 100644 scripts/atomic/fallbacks/inc_and_test
create mode 100644 scripts/atomic/fallbacks/inc_not_zero
create mode 100644 scripts/atomic/fallbacks/inc_unless_negative
create mode 100644 scripts/atomic/fallbacks/read_acquire
create mode 100644 scripts/atomic/fallbacks/release
create mode 100644 scripts/atomic/fallbacks/set_release
create mode 100644 scripts/atomic/fallbacks/sub_and_test
create mode 100644 scripts/atomic/fallbacks/try_cmpxchg
create mode 100755 scripts/atomic/gen-atomic-fallback.sh
create mode 100755 scripts/atomic/gen-atomic-instrumented.sh
create mode 100755 scripts/atomic/gen-atomic-long.sh
--
2.11.0
next reply other threads:[~2018-07-05 16:40 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-05 16:40 Mark Rutland [this message]
2018-07-05 16:40 ` [PATCHv3 01/12] atomic/tty: Fix up atomic abuse in ldsem Mark Rutland
2018-07-05 16:40 ` [PATCHv3 02/12] atomics/x86: reduce arch_cmpxchg64*() instrumentation Mark Rutland
2018-07-05 16:40 ` [PATCHv3 03/12] atomics: simplify cmpxchg() instrumentation Mark Rutland
2018-07-05 16:40 ` [PATCHv3 04/12] atomics/treewide: instrument xchg() Mark Rutland
2018-07-05 16:40 ` [PATCHv3 05/12] atomics: instrument cmpxchg_double*() Mark Rutland
2018-07-05 16:40 ` [PATCHv3 06/12] atomics/treewide: rework ordering barriers Mark Rutland
2018-07-05 16:40 ` [PATCHv3 07/12] atomics: add common header generation files Mark Rutland
2018-07-05 16:40 ` [PATCHv3 08/12] atomics: switch to generated fallbacks Mark Rutland
2018-07-05 17:23 ` Peter Zijlstra
2018-07-06 5:51 ` Mark Rutland
2018-07-05 16:40 ` [PATCHv3 09/12] atomics: switch to generated atomic-long Mark Rutland
2018-07-05 16:40 ` [PATCHv3 10/12] atomics: switch to generated instrumentation Mark Rutland
2018-07-05 16:40 ` [PATCHv3 11/12] atomics: check generated headers are up-to-date Mark Rutland
2018-07-05 16:40 ` [PATCHv3 12/12] arm64: use instrumented atomics Mark Rutland
2018-07-06 13:16 ` [PATCHv3 00/12] atomics: generate atomic headers / instrument arm64 Will Deacon
2018-07-06 13:21 ` Peter Zijlstra
2018-07-13 15:06 ` Mark Rutland
2018-07-14 13:01 ` Ingo Molnar
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=20180705164053.10073-1-mark.rutland@arm.com \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.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).