Commit 81fc685a authored by Ingo Molnar's avatar Ingo Molnar Committed by Linus Torvalds

[PATCH] lockdep: improve verbose messages

Make verbose lockdep messages (off by default) more informative by printing
out the hash chain key.  (this patch was what helped me catch the earlier
lockdep hash-collision bug)
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a6640897
...@@ -1264,7 +1264,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force) ...@@ -1264,7 +1264,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
* add it and return 0 - in this case the new dependency chain is * add it and return 0 - in this case the new dependency chain is
* validated. If the key is already hashed, return 1. * validated. If the key is already hashed, return 1.
*/ */
static inline int lookup_chain_cache(u64 chain_key) static inline int lookup_chain_cache(u64 chain_key, struct lock_class *class)
{ {
struct list_head *hash_head = chainhashentry(chain_key); struct list_head *hash_head = chainhashentry(chain_key);
struct lock_chain *chain; struct lock_chain *chain;
...@@ -1286,9 +1286,13 @@ static inline int lookup_chain_cache(u64 chain_key) ...@@ -1286,9 +1286,13 @@ static inline int lookup_chain_cache(u64 chain_key)
__raw_spin_lock(&hash_lock); __raw_spin_lock(&hash_lock);
return 1; return 1;
#endif #endif
if (very_verbose(class))
printk("\nhash chain already cached, key: %016Lx tail class: [%p] %s\n", chain_key, class->key, class->name);
return 0; return 0;
} }
} }
if (very_verbose(class))
printk("\nnew hash chain, key: %016Lx tail class: [%p] %s\n", chain_key, class->key, class->name);
/* /*
* Allocate a new chain entry from the static array, and add * Allocate a new chain entry from the static array, and add
* it to the hash: * it to the hash:
...@@ -2139,7 +2143,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, ...@@ -2139,7 +2143,7 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
* (If lookup_chain_cache() returns with 1 it acquires * (If lookup_chain_cache() returns with 1 it acquires
* hash_lock for us) * hash_lock for us)
*/ */
if (!trylock && (check == 2) && lookup_chain_cache(chain_key)) { if (!trylock && (check == 2) && lookup_chain_cache(chain_key, class)) {
/* /*
* Check whether last held lock: * Check whether last held lock:
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment