Messages in this thread | | | Date | Mon, 12 Oct 2020 15:58:00 +0200 | From | Ingo Molnar <> | Subject | [GIT PULL] locking changes for v5.10 |
| |
Linus,
Please pull the latest locking/core git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking-core-2020-10-12
# HEAD: 2116d708b0580c0048fc80b82ec4b53f4ddaa166 Merge branch 'lkmm' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into locking/core
These are the locking updates for v5.10:
- Add deadlock detection for recursive read-locks. The rationale is outlined in:
224ec489d3cd: ("lockdep/Documention: Recursive read lock detection reasoning")
The main deadlock pattern we want to detect is:
TASK A: TASK B:
read_lock(X); write_lock(X); read_lock_2(X);
- Add "latch sequence counters" (seqcount_latch_t):
A sequence counter variant where the counter even/odd value is used to switch between two copies of protected data. This allows the read path, typically NMIs, to safely interrupt the write side critical section.
We utilize this new variant for sched-clock, and to make x86 TSC handling safer.
- Other seqlock cleanups, fixes and enhancements
- KCSAN updates
- LKMM updates
- Misc updates, cleanups and fixes.
Note that there's a pending bugreport against:
4d004099a668: ("lockdep: Fix lockdep recursion")
this fix triggers a non-fatal RCU warning on some systems - but that looks like a real bug which was masked by a lockdep bug, with fixes being worked on and tested. The new boot time warning does not appear to be widespread (read: we couldn't reproduce it locally).
Thanks,
Ingo
------------------> Ahmed S. Darwish (13): time/sched_clock: Use raw_read_seqcount_latch() during suspend mm/swap: Do not abuse the seqcount_t latching API seqlock: Introduce seqcount_latch_t time/sched_clock: Use seqcount_latch_t timekeeping: Use seqcount_latch_t x86/tsc: Use seqcount_latch_t rbtree_latch: Use seqcount_latch_t seqlock: seqcount latch APIs: Only allow seqcount_latch_t seqlock: seqcount_LOCKNAME_t: Standardize naming convention seqlock: Use unique prefix for seqcount_t property accessors seqlock: seqcount_t: Implement all read APIs as statement expressions seqlock: seqcount_LOCKNAME_t: Introduce PREEMPT_RT support seqlock: PREEMPT_RT: Do not starve seqlock_t writers
Alexander A. Klimov (1): Replace HTTP links with HTTPS ones: LKMM
Boqun Feng (20): locking: More accurate annotations for read_lock() lockdep/Documention: Recursive read lock detection reasoning lockdep: Demagic the return value of BFS lockdep: Make __bfs() visit every dependency until a match lockdep: Reduce the size of lock_list::distance lockdep: Introduce lock_list::dep lockdep: Extend __bfs() to work with multiple types of dependencies lockdep: Make __bfs(.match) return bool lockdep: Support deadlock detection for recursive read locks in check_noncircular() lockdep: Adjust check_redundant() for recursive read change lockdep: Fix recursive read lock related safe->unsafe detection lockdep: Add recursive read locks into dependency graph lockdep/selftest: Add a R-L/L-W test case specific to chain cache behavior lockdep: Take read/write status in consideration when generate chainkey lockdep/selftest: Unleash irq_read_recursion2 and add more lockdep/selftest: Add more recursive read related test cases Revert "locking/lockdep/selftests: Fix mixed read-write ABBA tests" locking/selftest: Add test cases for queued_read_lock() lockdep/selftest: Introduce recursion3 lockdep: Optimize the memory usage of circular queue
Marco Elver (19): kcsan: Add support for atomic builtins objtool: Add atomic builtin TSAN instrumentation to uaccess whitelist kcsan: Add atomic builtin test case kcsan: Support compounded read-write instrumentation objtool, kcsan: Add __tsan_read_write to uaccess whitelist kcsan: Skew delay to be longer for certain access types kcsan: Add missing CONFIG_KCSAN_IGNORE_ATOMICS checks kcsan: Test support for compound instrumentation instrumented.h: Introduce read-write instrumentation hooks asm-generic/bitops: Use instrument_read_write() where appropriate locking/atomics: Use read-write instrumentation for atomic RMWs kcsan: Simplify debugfs counter to name mapping kcsan: Simplify constant string handling kcsan: Remove debugfs test command kcsan: Show message if enabled early kcsan: Use pr_fmt for consistency kcsan: Optimize debugfs stats counters bitops, kcsan: Partially revert instrumentation for non-atomic bitops kcsan: Use tracing-safe version of prandom
Marta Rybczynska (1): Documentation/locking/locktypes: Fix local_locks documentation
Paul Bolle (1): locking/atomics: Check atomic-arch-fallback.h too
Paul E. McKenney (4): tools/memory-model: Update recipes.txt prime_numbers.c path tools/memory-model: Improve litmus-test documentation tools/memory-model: Add a simple entry point document tools/memory-model: Expand the cheatsheet.txt notion of relaxed
Peter Zijlstra (5): seqlock,tags: Add support for SEQCOUNT_LOCKTYPE() locking/refcount: Provide __refcount API to obtain the old value lockdep: Fix usage_traceoverflow lockdep: Fix lockdep recursion lockdep: Revert "lockdep: Use raw_cpu_*() for per-cpu variables"
Randy Dunlap (1): seqlock: Fix multiple kernel-doc warnings
Sebastian Andrzej Siewior (1): locking/seqlock: Tweak DEFINE_SEQLOCK() kernel doc
peterz@infradead.org (1): seqlock: Unbreak lockdep
Documentation/locking/lockdep-design.rst | 258 +++++ Documentation/locking/seqlock.rst | 18 + arch/x86/kernel/tsc.c | 10 +- include/asm-generic/atomic-instrumented.h | 330 +++--- include/asm-generic/bitops/instrumented-atomic.h | 6 +- include/asm-generic/bitops/instrumented-lock.h | 2 +- .../asm-generic/bitops/instrumented-non-atomic.h | 30 +- include/linux/instrumented.h | 30 + include/linux/kcsan-checks.h | 45 +- include/linux/lockdep.h | 58 +- include/linux/lockdep_types.h | 8 +- include/linux/rbtree_latch.h | 6 +- include/linux/refcount.h | 65 +- include/linux/seqlock.h | 388 ++++--- kernel/kcsan/core.c | 210 +++- kernel/kcsan/debugfs.c | 130 +-- kernel/kcsan/kcsan-test.c | 128 ++- kernel/kcsan/kcsan.h | 12 +- kernel/kcsan/report.c | 10 +- kernel/kcsan/selftest.c | 8 +- kernel/locking/lockdep.c | 977 ++++++++++++------ kernel/locking/lockdep_internals.h | 7 +- kernel/time/sched_clock.c | 6 +- kernel/time/timekeeping.c | 10 +- lib/Kconfig.kcsan | 5 + lib/locking-selftest.c | 445 +++++++- mm/swap.c | 65 +- scripts/Makefile.kcsan | 2 +- scripts/atomic/check-atomics.sh | 1 + scripts/atomic/gen-atomic-instrumented.sh | 21 +- scripts/tags.sh | 2 + tools/memory-model/Documentation/cheatsheet.txt | 33 +- tools/memory-model/Documentation/litmus-tests.txt | 1074 ++++++++++++++++++++ tools/memory-model/Documentation/recipes.txt | 4 +- tools/memory-model/Documentation/references.txt | 2 +- tools/memory-model/Documentation/simple.txt | 271 +++++ tools/memory-model/README | 160 +-- tools/objtool/check.c | 55 + 38 files changed, 3900 insertions(+), 992 deletions(-) create mode 100644 tools/memory-model/Documentation/litmus-tests.txt create mode 100644 tools/memory-model/Documentation/simple.txt
| |