From: Bart Van Assche <bvanassche@acm.org>
To: mingo@redhat.com
Cc: peterz@infradead.org, tj@kernel.org, johannes.berg@intel.com,
linux-kernel@vger.kernel.org,
Bart Van Assche <bvanassche@acm.org>
Subject: [PATCH 00/27] locking/lockdep: Add support for dynamic keys
Date: Wed, 28 Nov 2018 15:42:58 -0800 [thread overview]
Message-ID: <20181128234325.110011-1-bvanassche@acm.org> (raw)
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
next reply other threads:[~2018-11-28 23:45 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-28 23:42 Bart Van Assche [this message]
2018-11-28 23:42 ` [PATCH 01/27] lockdep tests: Display compiler warning and error messages Bart Van Assche
2018-11-28 23:43 ` [PATCH 02/27] lockdep tests: Fix shellcheck warnings Bart Van Assche
2018-11-28 23:43 ` [PATCH 03/27] lockdep tests: Improve testing accuracy Bart Van Assche
2018-11-28 23:43 ` [PATCH 04/27] lockdep tests: Run lockdep tests a second time under Valgrind Bart Van Assche
2018-11-28 23:43 ` [PATCH 05/27] liblockdep: Rename "trywlock" into "trywrlock" Bart Van Assche
2018-11-28 23:43 ` [PATCH 06/27] liblockdep: Add dummy print_irqtrace_events() implementation Bart Van Assche
2018-11-28 23:43 ` [PATCH 07/27] lockdep tests: Test the lockdep_reset_lock() implementation Bart Van Assche
2018-11-28 23:43 ` [PATCH 08/27] locking/lockdep: Declare local symbols static Bart Van Assche
2018-11-28 23:43 ` [PATCH 09/27] locking/lockdep: Inline __lockdep_init_map() Bart Van Assche
2018-11-28 23:43 ` [PATCH 10/27] locking/lockdep: Introduce lock_class_cache_is_registered() Bart Van Assche
2018-11-28 23:43 ` [PATCH 11/27] timekeeping: Assign a name to tk_core.seq.dep_map Bart Van Assche
2018-12-05 10:03 ` [tip:timers/core] timekeeping: Use proper seqcount initializer tip-bot for Bart Van Assche
2018-11-28 23:43 ` [PATCH 12/27] net/core: Assign a name to devnet_rename_seq.dep_map Bart Van Assche
2018-11-29 0:45 ` David Miller
2018-11-28 23:43 ` [PATCH 13/27] locking/lockdep: Complain if a lock object has no name Bart Van Assche
2018-11-28 23:43 ` [PATCH 14/27] locking/lockdep: Remove a superfluous INIT_LIST_HEAD() statement Bart Van Assche
2018-11-28 23:43 ` [PATCH 15/27] locking/lockdep: Make concurrent lockdep_reset_lock() calls safe Bart Van Assche
2018-11-28 23:43 ` [PATCH 16/27] locking/lockdep: Stop using RCU primitives to access all_lock_classes Bart Van Assche
2018-11-28 23:43 ` [PATCH 17/27] locking/lockdep: Make zap_class() remove all matching lock order entries Bart Van Assche
2018-11-28 23:43 ` [PATCH 18/27] locking/lockdep: Reorder struct lock_class members Bart Van Assche
2018-11-28 23:43 ` [PATCH 19/27] locking/lockdep: Retain the class key and name while freeing a lock class Bart Van Assche
2018-11-28 23:43 ` [PATCH 20/27] locking/lockdep: Free lock classes that are no longer in use Bart Van Assche
2018-11-29 10:37 ` Peter Zijlstra
2018-11-28 23:43 ` [PATCH 21/27] locking/lockdep: Rename lock_list.entry into lock_list.lock_order_entry Bart Van Assche
2018-11-28 23:43 ` [PATCH 22/27] locking/lockdep: Reuse list entries that are no longer in use Bart Van Assche
2018-11-29 10:49 ` Peter Zijlstra
2018-11-29 12:01 ` Peter Zijlstra
2018-11-29 16:48 ` Bart Van Assche
2018-12-01 20:24 ` Peter Zijlstra
2018-12-03 16:40 ` Bart Van Assche
2018-12-03 17:32 ` Peter Zijlstra
2018-12-03 18:16 ` Bart Van Assche
2018-12-04 8:14 ` Peter Zijlstra
2018-12-04 16:08 ` Bart Van Assche
2018-11-28 23:43 ` [PATCH 23/27] locking/lockdep: Check data structure consistency Bart Van Assche
2018-11-29 12:30 ` Peter Zijlstra
2018-11-29 16:50 ` Bart Van Assche
2018-11-29 16:59 ` Peter Zijlstra
2018-11-28 23:43 ` [PATCH 24/27] locking/lockdep: Introduce __lockdep_free_key_range() Bart Van Assche
2018-11-29 10:00 ` Peter Zijlstra
2018-11-28 23:43 ` [PATCH 25/27] locking/lockdep: Add support for dynamic keys Bart Van Assche
2018-11-29 10:10 ` Peter Zijlstra
2018-12-03 17:07 ` Bart Van Assche
2018-12-03 17:31 ` Peter Zijlstra
2018-11-29 12:04 ` Peter Zijlstra
2018-11-29 16:59 ` Bart Van Assche
2018-11-28 23:43 ` [PATCH 26/27] kernel/workqueue: Use dynamic lockdep keys for workqueues Bart Van Assche
2018-11-28 23:43 ` [PATCH 27/27] lockdep tests: Test dynamic key registration Bart Van Assche
2018-11-29 12:31 ` [PATCH 00/27] locking/lockdep: Add support for dynamic keys Peter Zijlstra
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=20181128234325.110011-1-bvanassche@acm.org \
--to=bvanassche@acm.org \
--cc=johannes.berg@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tj@kernel.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).