Hi Ingo and Peter, A known shortcoming of the current lockdep implementation is that it requires lock keys to be allocated statically and that this key sharing can cause false positive deadlock reports. This patch series adds support for dynamic keys in the lockdep code. I'm not claiming that this patch series is perfect. However, the code in this patch series survives nontrivial tests so I think it's worth a look. Two unrelated changes in this patch series are: - Improve the lockdep tests. - Complain if no name has been assigned to a lock object.
Thanks, Bart. Bart Van Assche (27): lockdep tests: Display compiler warning and error messages lockdep tests: Fix shellcheck warnings lockdep tests: Improve testing accuracy lockdep tests: Run lockdep tests a second time under Valgrind liblockdep: Rename "trywlock" into "trywrlock" liblockdep: Add dummy print_irqtrace_events() implementation lockdep tests: Test the lockdep_reset_lock() implementation locking/lockdep: Declare local symbols static locking/lockdep: Inline __lockdep_init_map() locking/lockdep: Introduce lock_class_cache_is_registered() timekeeping: Assign a name to tk_core.seq.dep_map net/core: Assign a name to devnet_rename_seq.dep_map locking/lockdep: Complain if a lock object has no name locking/lockdep: Remove a superfluous INIT_LIST_HEAD() statement locking/lockdep: Make concurrent lockdep_reset_lock() calls safe locking/lockdep: Stop using RCU primitives to access all_lock_classes locking/lockdep: Make zap_class() remove all matching lock order entries locking/lockdep: Reorder struct lock_class members locking/lockdep: Retain the class key and name while freeing a lock class locking/lockdep: Free lock classes that are no longer in use locking/lockdep: Rename lock_list.entry into lock_list.lock_order_entry locking/lockdep: Reuse list entries that are no longer in use locking/lockdep: Check data structure consistency locking/lockdep: Introduce __lockdep_free_key_range() locking/lockdep: Add support for dynamic keys kernel/workqueue: Use dynamic lockdep keys for workqueues lockdep tests: Test dynamic key registration include/linux/lockdep.h | 45 +- include/linux/workqueue.h | 28 +- kernel/locking/lockdep.c | 640 +++++++++++++++--- kernel/locking/lockdep_proc.c | 2 +- kernel/time/timekeeping.c | 4 +- kernel/workqueue.c | 60 +- net/core/dev.c | 2 +- tools/lib/lockdep/include/liblockdep/common.h | 3 + tools/lib/lockdep/include/liblockdep/mutex.h | 12 +- tools/lib/lockdep/include/liblockdep/rwlock.h | 6 +- tools/lib/lockdep/lockdep.c | 5 + tools/lib/lockdep/run_tests.sh | 38 +- tools/lib/lockdep/tests/AA.sh | 2 + tools/lib/lockdep/tests/ABA.sh | 2 + tools/lib/lockdep/tests/ABBA.c | 12 + tools/lib/lockdep/tests/ABBA.sh | 2 + tools/lib/lockdep/tests/ABBA_2threads.sh | 2 + tools/lib/lockdep/tests/ABBCCA.c | 4 + tools/lib/lockdep/tests/ABBCCA.sh | 2 + tools/lib/lockdep/tests/ABBCCDDA.c | 5 + tools/lib/lockdep/tests/ABBCCDDA.sh | 2 + tools/lib/lockdep/tests/ABCABC.c | 4 + tools/lib/lockdep/tests/ABCABC.sh | 2 + tools/lib/lockdep/tests/ABCDBCDA.c | 5 + tools/lib/lockdep/tests/ABCDBCDA.sh | 2 + tools/lib/lockdep/tests/ABCDBDDA.c | 5 + tools/lib/lockdep/tests/ABCDBDDA.sh | 2 + tools/lib/lockdep/tests/WW.sh | 2 + tools/lib/lockdep/tests/unlock_balance.c | 2 + tools/lib/lockdep/tests/unlock_balance.sh | 2 + 30 files changed, 726 insertions(+), 178 deletions(-) create mode 100755 tools/lib/lockdep/tests/AA.sh create mode 100755 tools/lib/lockdep/tests/ABA.sh create mode 100755 tools/lib/lockdep/tests/ABBA.sh create mode 100755 tools/lib/lockdep/tests/ABBA_2threads.sh create mode 100755 tools/lib/lockdep/tests/ABBCCA.sh create mode 100755 tools/lib/lockdep/tests/ABBCCDDA.sh create mode 100755 tools/lib/lockdep/tests/ABCABC.sh create mode 100755 tools/lib/lockdep/tests/ABCDBCDA.sh create mode 100755 tools/lib/lockdep/tests/ABCDBDDA.sh create mode 100755 tools/lib/lockdep/tests/WW.sh create mode 100755 tools/lib/lockdep/tests/unlock_balance.sh -- 2.20.0.rc0.387.gc7a69e6b6c-goog