diff options
Diffstat (limited to 'kernel/lockdep_proc.c')
| -rw-r--r-- | kernel/lockdep_proc.c | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c index 9b0e940e2545..fa19aee604c2 100644 --- a/kernel/lockdep_proc.c +++ b/kernel/lockdep_proc.c | |||
| @@ -63,34 +63,6 @@ static void l_stop(struct seq_file *m, void *v) | |||
| 63 | { | 63 | { |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | static unsigned long count_forward_deps(struct lock_class *class) | ||
| 67 | { | ||
| 68 | struct lock_list *entry; | ||
| 69 | unsigned long ret = 1; | ||
| 70 | |||
| 71 | /* | ||
| 72 | * Recurse this class's dependency list: | ||
| 73 | */ | ||
| 74 | list_for_each_entry(entry, &class->locks_after, entry) | ||
| 75 | ret += count_forward_deps(entry->class); | ||
| 76 | |||
| 77 | return ret; | ||
| 78 | } | ||
| 79 | |||
| 80 | static unsigned long count_backward_deps(struct lock_class *class) | ||
| 81 | { | ||
| 82 | struct lock_list *entry; | ||
| 83 | unsigned long ret = 1; | ||
| 84 | |||
| 85 | /* | ||
| 86 | * Recurse this class's dependency list: | ||
| 87 | */ | ||
| 88 | list_for_each_entry(entry, &class->locks_before, entry) | ||
| 89 | ret += count_backward_deps(entry->class); | ||
| 90 | |||
| 91 | return ret; | ||
| 92 | } | ||
| 93 | |||
| 94 | static void print_name(struct seq_file *m, struct lock_class *class) | 66 | static void print_name(struct seq_file *m, struct lock_class *class) |
| 95 | { | 67 | { |
| 96 | char str[128]; | 68 | char str[128]; |
| @@ -124,10 +96,10 @@ static int l_show(struct seq_file *m, void *v) | |||
| 124 | #ifdef CONFIG_DEBUG_LOCKDEP | 96 | #ifdef CONFIG_DEBUG_LOCKDEP |
| 125 | seq_printf(m, " OPS:%8ld", class->ops); | 97 | seq_printf(m, " OPS:%8ld", class->ops); |
| 126 | #endif | 98 | #endif |
| 127 | nr_forward_deps = count_forward_deps(class); | 99 | nr_forward_deps = lockdep_count_forward_deps(class); |
| 128 | seq_printf(m, " FD:%5ld", nr_forward_deps); | 100 | seq_printf(m, " FD:%5ld", nr_forward_deps); |
| 129 | 101 | ||
| 130 | nr_backward_deps = count_backward_deps(class); | 102 | nr_backward_deps = lockdep_count_backward_deps(class); |
| 131 | seq_printf(m, " BD:%5ld", nr_backward_deps); | 103 | seq_printf(m, " BD:%5ld", nr_backward_deps); |
| 132 | 104 | ||
| 133 | get_usage_chars(class, &c1, &c2, &c3, &c4); | 105 | get_usage_chars(class, &c1, &c2, &c3, &c4); |
| @@ -229,6 +201,9 @@ static int lc_show(struct seq_file *m, void *v) | |||
| 229 | 201 | ||
| 230 | for (i = 0; i < chain->depth; i++) { | 202 | for (i = 0; i < chain->depth; i++) { |
| 231 | class = lock_chain_get_class(chain, i); | 203 | class = lock_chain_get_class(chain, i); |
| 204 | if (!class->key) | ||
| 205 | continue; | ||
| 206 | |||
| 232 | seq_printf(m, "[%p] ", class->key); | 207 | seq_printf(m, "[%p] ", class->key); |
| 233 | print_name(m, class); | 208 | print_name(m, class); |
| 234 | seq_puts(m, "\n"); | 209 | seq_puts(m, "\n"); |
| @@ -350,7 +325,7 @@ static int lockdep_stats_show(struct seq_file *m, void *v) | |||
| 350 | if (class->usage_mask & LOCKF_ENABLED_HARDIRQS_READ) | 325 | if (class->usage_mask & LOCKF_ENABLED_HARDIRQS_READ) |
| 351 | nr_hardirq_read_unsafe++; | 326 | nr_hardirq_read_unsafe++; |
| 352 | 327 | ||
| 353 | sum_forward_deps += count_forward_deps(class); | 328 | sum_forward_deps += lockdep_count_forward_deps(class); |
| 354 | } | 329 | } |
| 355 | #ifdef CONFIG_DEBUG_LOCKDEP | 330 | #ifdef CONFIG_DEBUG_LOCKDEP |
| 356 | DEBUG_LOCKS_WARN_ON(debug_atomic_read(&nr_unused_locks) != nr_unused); | 331 | DEBUG_LOCKS_WARN_ON(debug_atomic_read(&nr_unused_locks) != nr_unused); |
