Message ID | 20180716113017.3909-1-mark.rutland@arm.com |
---|---|
Headers | show |
Series | atomics: generate atomic headers / instrument arm64 | expand |
On Mon, Jul 16, 2018 at 12:30:05PM +0100, Mark Rutland wrote: > Hi Ingo, Sorry to ping, but are you happy to pick this up? Mark. > Are you happy to pick this series? Both Will and Peter are happy with v3, and > since then I've only made a minor cleanup to the commit messages for patches > 8-10 (as requested by Peter), and added Will's Acked-by tags. > > 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 > > Since v3 [3]: > * Add Will's Acked-by tags > * Clean up rationale for patches 8-10 given we check at kbuild time > > The series is based on my atomic API cleanup patches [4], 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. > > 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 [5], based atop of > tip locking/core. > > Thanks, > Mark. > > [1] https://lkml.kernel.org/r/20180529180746.29684-1-mark.rutland@arm.com > [2] https://lkml.kernel.org/r/20180625105952.3756-1-mark.rutland@arm.com > [3] https://lkml.kernel.org/r/20180705164053.10073-1-mark.rutland@arm.com > [4] https://lkml.kernel.org/r/20180621121321.4761-1-mark.rutland@arm.com > [5] 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 >