|
@@ -139,7 +139,7 @@ static struct lock_list list_entries[MAX_LOCKDEP_ENTRIES];
|
|
|
* get freed - this significantly simplifies the debugging code.
|
|
|
*/
|
|
|
unsigned long nr_lock_classes;
|
|
|
-static struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
|
|
|
+struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
|
|
|
|
|
|
static inline struct lock_class *hlock_class(struct held_lock *hlock)
|
|
|
{
|
|
@@ -436,6 +436,7 @@ unsigned int max_lockdep_depth;
|
|
|
* Various lockdep statistics:
|
|
|
*/
|
|
|
DEFINE_PER_CPU(struct lockdep_stats, lockdep_stats);
|
|
|
+DEFINE_PER_CPU(unsigned long [MAX_LOCKDEP_KEYS], lock_class_ops);
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
@@ -1392,7 +1393,9 @@ static void print_lock_class_header(struct lock_class *class, int depth)
|
|
|
|
|
|
printk("%*s->", depth, "");
|
|
|
print_lock_name(class);
|
|
|
- printk(KERN_CONT " ops: %lu", class->ops);
|
|
|
+#ifdef CONFIG_DEBUG_LOCKDEP
|
|
|
+ printk(KERN_CONT " ops: %lu", debug_class_ops_read(class));
|
|
|
+#endif
|
|
|
printk(KERN_CONT " {\n");
|
|
|
|
|
|
for (bit = 0; bit < LOCK_USAGE_STATES; bit++) {
|
|
@@ -3227,7 +3230,9 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
|
|
|
if (!class)
|
|
|
return 0;
|
|
|
}
|
|
|
- atomic_inc((atomic_t *)&class->ops);
|
|
|
+
|
|
|
+ debug_class_ops_inc(class);
|
|
|
+
|
|
|
if (very_verbose(class)) {
|
|
|
printk("\nacquire class [%px] %s", class->key, class->name);
|
|
|
if (class->name_version > 1)
|