lockdep: Deal with many similar locks
commitbb97a91e2549a7f2df9c21d32542582f549ab3ec
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Mon, 20 Jul 2009 17:15:35 +0000 (20 19:15 +0200)
committerIngo Molnar <mingo@elte.hu>
Sun, 2 Aug 2009 13:41:35 +0000 (2 15:41 +0200)
treefdddcb458b74a39e97089e5bcc93234cb50704c6
parentf607c6685774811b8112e124f10a053d77015485
lockdep: Deal with many similar locks

spin_lock_nest_lock() allows to take many instances of the same
class, this can easily lead to overflow of MAX_LOCK_DEPTH.

To avoid this overflow, we'll stop accounting instances but
start reference counting the class in the held_lock structure.

[ We could maintain a list of instances, if we'd move the hlock
  stuff into __lock_acquired(), but that would require
  significant modifications to the current code. ]

We restrict this mode to spin_lock_nest_lock() only, because it
degrades the lockdep quality due to lost of instance.

For lockstat this means we don't track lock statistics for any
but the first lock in the series.

Currently nesting is limited to 11 bits because that was the
spare space available in held_lock. This yields a 2048
instances maximium.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
include/linux/lockdep.h
kernel/lockdep.c