| @@ -1129,10 +1129,11 @@ print_circular_bug_header(struct lock_list *entry, unsigned int depth, · 1128 unmodified lines |
| 1129 | if (debug_locks_silent) | 1129 | if (debug_locks_silent) |
| 1130 | return 0; | 1130 | return 0; |
| 1131 | | 1131 | |
| 1132 | printk("\n=======================================================\n"); | 1132 | printk("\n"); |
| 1133 | printk( "[ INFO: possible circular locking dependency detected ]\n"); | 1133 | printk("======================================================\n"); |
| | 1134 | printk("[ INFO: possible circular locking dependency detected ]\n"); |
| 1134 | print_kernel_version(); | 1135 | print_kernel_version(); |
| 1135 | printk( "-------------------------------------------------------\n"); | 1136 | printk("-------------------------------------------------------\n"); |
| 1136 | printk("%s/%d is trying to acquire lock:\n", | 1137 | printk("%s/%d is trying to acquire lock:\n", |
| 1137 | curr->comm, task_pid_nr(curr)); | 1138 | curr->comm, task_pid_nr(curr)); |
| 1138 | print_lock(check_src); | 1139 | print_lock(check_src); |
| @@ -1463,11 +1464,12 @@ print_bad_irq_dependency(struct task_struct *curr, · 324 unmodified lines |
| 1463 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) | 1464 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) |
| 1464 | return 0; | 1465 | return 0; |
| 1465 | | 1466 | |
| 1466 | printk("\n======================================================\n"); | 1467 | printk("\n"); |
| 1467 | printk( "[ INFO: %s-safe -> %s-unsafe lock order detected ]\n", | 1468 | printk("======================================================\n"); |
| | 1469 | printk("[ INFO: %s-safe -> %s-unsafe lock order detected ]\n", |
| 1468 | irqclass, irqclass); | 1470 | irqclass, irqclass); |
| 1469 | print_kernel_version(); | 1471 | print_kernel_version(); |
| 1470 | printk( "------------------------------------------------------\n"); | 1472 | printk("------------------------------------------------------\n"); |
| 1471 | printk("%s/%d [HC%u[%lu]:SC%u[%lu]:HE%u:SE%u] is trying to acquire:\n", | 1473 | printk("%s/%d [HC%u[%lu]:SC%u[%lu]:HE%u:SE%u] is trying to acquire:\n", |
| 1472 | curr->comm, task_pid_nr(curr), | 1474 | curr->comm, task_pid_nr(curr), |
| 1473 | curr->hardirq_context, hardirq_count() >> HARDIRQ_SHIFT, | 1475 | curr->hardirq_context, hardirq_count() >> HARDIRQ_SHIFT, |
| @@ -1692,10 +1694,11 @@ print_deadlock_bug(struct task_struct *curr, struct held_lock *prev, · 218 unmodified lines |
| 1692 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) | 1694 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) |
| 1693 | return 0; | 1695 | return 0; |
| 1694 | | 1696 | |
| 1695 | printk("\n=============================================\n"); | 1697 | printk("\n"); |
| 1696 | printk( "[ INFO: possible recursive locking detected ]\n"); | 1698 | printk("=============================================\n"); |
| | 1699 | printk("[ INFO: possible recursive locking detected ]\n"); |
| 1697 | print_kernel_version(); | 1700 | print_kernel_version(); |
| 1698 | printk( "---------------------------------------------\n"); | 1701 | printk("---------------------------------------------\n"); |
| 1699 | printk("%s/%d is trying to acquire lock:\n", | 1702 | printk("%s/%d is trying to acquire lock:\n", |
| 1700 | curr->comm, task_pid_nr(curr)); | 1703 | curr->comm, task_pid_nr(curr)); |
| 1701 | print_lock(next); | 1704 | print_lock(next); |
| @@ -2177,10 +2180,11 @@ print_usage_bug(struct task_struct *curr, struct held_lock *this, · 475 unmodified lines |
| 2177 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) | 2180 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) |
| 2178 | return 0; | 2181 | return 0; |
| 2179 | | 2182 | |
| 2180 | printk("\n=================================\n"); | 2183 | printk("\n"); |
| 2181 | printk( "[ INFO: inconsistent lock state ]\n"); | 2184 | printk("=================================\n"); |
| | 2185 | printk("[ INFO: inconsistent lock state ]\n"); |
| 2182 | print_kernel_version(); | 2186 | print_kernel_version(); |
| 2183 | printk( "---------------------------------\n"); | 2187 | printk("---------------------------------\n"); |
| 2184 | | 2188 | |
| 2185 | printk("inconsistent {%s} -> {%s} usage.\n", | 2189 | printk("inconsistent {%s} -> {%s} usage.\n", |
| 2186 | usage_str[prev_bit], usage_str[new_bit]); | 2190 | usage_str[prev_bit], usage_str[new_bit]); |
| @@ -2241,10 +2245,11 @@ print_irq_inversion_bug(struct task_struct *curr, · 54 unmodified lines |
| 2241 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) | 2245 | if (!debug_locks_off_graph_unlock() || debug_locks_silent) |
| 2242 | return 0; | 2246 | return 0; |
| 2243 | | 2247 | |
| 2244 | printk("\n=========================================================\n"); | 2248 | printk("\n"); |
| 2245 | printk( "[ INFO: possible irq lock inversion dependency detected ]\n"); | 2249 | printk("=========================================================\n"); |
| | 2250 | printk("[ INFO: possible irq lock inversion dependency detected ]\n"); |
| 2246 | print_kernel_version(); | 2251 | print_kernel_version(); |
| 2247 | printk( "---------------------------------------------------------\n"); | 2252 | printk("---------------------------------------------------------\n"); |
| 2248 | printk("%s/%d just changed the state of lock:\n", | 2253 | printk("%s/%d just changed the state of lock:\n", |
| 2249 | curr->comm, task_pid_nr(curr)); | 2254 | curr->comm, task_pid_nr(curr)); |
| 2250 | print_lock(this); | 2255 | print_lock(this); |
| @@ -3065,9 +3070,10 @@ print_unlock_inbalance_bug(struct task_struct *curr, struct lockdep_map *lock, · 814 unmodified lines |
| 3065 | if (debug_locks_silent) | 3070 | if (debug_locks_silent) |
| 3066 | return 0; | 3071 | return 0; |
| 3067 | | 3072 | |
| 3068 | printk("\n=====================================\n"); | 3073 | printk("\n"); |
| 3069 | printk( "[ BUG: bad unlock balance detected! ]\n"); | 3074 | printk("=====================================\n"); |
| 3070 | printk( "-------------------------------------\n"); | 3075 | printk("[ BUG: bad unlock balance detected! ]\n"); |
| | 3076 | printk("-------------------------------------\n"); |
| 3071 | printk("%s/%d is trying to release lock (", | 3077 | printk("%s/%d is trying to release lock (", |
| 3072 | curr->comm, task_pid_nr(curr)); | 3078 | curr->comm, task_pid_nr(curr)); |
| 3073 | print_lockdep_cache(lock); | 3079 | print_lockdep_cache(lock); |
| @@ -3478,9 +3484,10 @@ print_lock_contention_bug(struct task_struct *curr, struct lockdep_map *lock, · 404 unmodified lines |
| 3478 | if (debug_locks_silent) | 3484 | if (debug_locks_silent) |
| 3479 | return 0; | 3485 | return 0; |
| 3480 | | 3486 | |
| 3481 | printk("\n=================================\n"); | 3487 | printk("\n"); |
| 3482 | printk( "[ BUG: bad contention detected! ]\n"); | 3488 | printk("=================================\n"); |
| 3483 | printk( "---------------------------------\n"); | 3489 | printk("[ BUG: bad contention detected! ]\n"); |
| | 3490 | printk("---------------------------------\n"); |
| 3484 | printk("%s/%d is trying to contend lock (", | 3491 | printk("%s/%d is trying to contend lock (", |
| 3485 | curr->comm, task_pid_nr(curr)); | 3492 | curr->comm, task_pid_nr(curr)); |
| 3486 | print_lockdep_cache(lock); | 3493 | print_lockdep_cache(lock); |
| @@ -3839,9 +3846,10 @@ print_freed_lock_bug(struct task_struct *curr, const void *mem_from, · 352 unmodified lines |
| 3839 | if (debug_locks_silent) | 3846 | if (debug_locks_silent) |
| 3840 | return; | 3847 | return; |
| 3841 | | 3848 | |
| 3842 | printk("\n=========================\n"); | 3849 | printk("\n"); |
| 3843 | printk( "[ BUG: held lock freed! ]\n"); | 3850 | printk("=========================\n"); |
| 3844 | printk( "-------------------------\n"); | 3851 | printk("[ BUG: held lock freed! ]\n"); |
| | 3852 | printk("-------------------------\n"); |
| 3845 | printk("%s/%d is freeing memory %p-%p, with a lock still held there!\n", | 3853 | printk("%s/%d is freeing memory %p-%p, with a lock still held there!\n", |
| 3846 | curr->comm, task_pid_nr(curr), mem_from, mem_to-1); | 3854 | curr->comm, task_pid_nr(curr), mem_from, mem_to-1); |
| 3847 | print_lock(hlock); | 3855 | print_lock(hlock); |
| @@ -3895,9 +3903,10 @@ static void print_held_locks_bug(struct task_struct *curr) · 47 unmodified lines |
| 3895 | if (debug_locks_silent) | 3903 | if (debug_locks_silent) |
| 3896 | return; | 3904 | return; |
| 3897 | | 3905 | |
| 3898 | printk("\n=====================================\n"); | 3906 | printk("\n"); |
| 3899 | printk( "[ BUG: lock held at task exit time! ]\n"); | 3907 | printk("=====================================\n"); |
| 3900 | printk( "-------------------------------------\n"); | 3908 | printk("[ BUG: lock held at task exit time! ]\n"); |
| | 3909 | printk("-------------------------------------\n"); |
| 3901 | printk("%s/%d is exiting with locks still held!\n", | 3910 | printk("%s/%d is exiting with locks still held!\n", |
| 3902 | curr->comm, task_pid_nr(curr)); | 3911 | curr->comm, task_pid_nr(curr)); |
| 3903 | lockdep_print_held_locks(curr); | 3912 | lockdep_print_held_locks(curr); |
| @@ -3991,16 +4000,17 @@ void lockdep_sys_exit(void) · 87 unmodified lines |
| 3991 | if (unlikely(curr->lockdep_depth)) { | 4000 | if (unlikely(curr->lockdep_depth)) { |
| 3992 | if (!debug_locks_off()) | 4001 | if (!debug_locks_off()) |
| 3993 | return; | 4002 | return; |
| 3994 | printk("\n================================================\n"); | 4003 | printk("\n"); |
| 3995 | printk( "[ BUG: lock held when returning to user space! ]\n"); | 4004 | printk("================================================\n"); |
| 3996 | printk( "------------------------------------------------\n"); | 4005 | printk("[ BUG: lock held when returning to user space! ]\n"); |
| | 4006 | printk("------------------------------------------------\n"); |
| 3997 | printk("%s/%d is leaving the kernel with locks still held!\n", | 4007 | printk("%s/%d is leaving the kernel with locks still held!\n", |
| 3998 | curr->comm, curr->pid); | 4008 | curr->comm, curr->pid); |
| 3999 | lockdep_print_held_locks(curr); | 4009 | lockdep_print_held_locks(curr); |
| 4000 | } | 4010 | } |
| 4001 | } | 4011 | } |
| 4002 | | 4012 | |
| 4003 | void lockdep_rcu_dereference(const char *file, const int line) | 4013 | void lockdep_rcu_suspicious(const char *file, const int line, const char *s) |
| 4004 | { | 4014 | { |
| 4005 | struct task_struct *curr = current; | 4015 | struct task_struct *curr = current; |
| 4006 | | 4016 | |
| @@ -4009,15 +4019,15 @@ void lockdep_rcu_dereference(const char *file, const int line) · 2 unmodified lines |
| 4009 | return; | 4019 | return; |
| 4010 | #endif /* #ifdef CONFIG_PROVE_RCU_REPEATEDLY */ | 4020 | #endif /* #ifdef CONFIG_PROVE_RCU_REPEATEDLY */ |
| 4011 | /* Note: the following can be executed concurrently, so be careful. */ | 4021 | /* Note: the following can be executed concurrently, so be careful. */ |
| 4012 | printk("\n===================================================\n"); | 4022 | printk("\n"); |
| 4013 | printk( "[ INFO: suspicious rcu_dereference_check() usage. ]\n"); | 4023 | printk("===============================\n"); |
| 4014 | printk( "---------------------------------------------------\n"); | 4024 | printk("[ INFO: suspicious RCU usage. ]\n"); |
| 4015 | printk("%s:%d invoked rcu_dereference_check() without protection!\n", | 4025 | printk("-------------------------------\n"); |
| 4016 | file, line); | 4026 | printk("%s:%d %s!\n", file, line, s); |
| 4017 | printk("\nother info that might help us debug this:\n\n"); | 4027 | printk("\nother info that might help us debug this:\n\n"); |
| 4018 | printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks); | 4028 | printk("\nrcu_scheduler_active = %d, debug_locks = %d\n", rcu_scheduler_active, debug_locks); |
| 4019 | lockdep_print_held_locks(curr); | 4029 | lockdep_print_held_locks(curr); |
| 4020 | printk("\nstack backtrace:\n"); | 4030 | printk("\nstack backtrace:\n"); |
| 4021 | dump_stack(); | 4031 | dump_stack(); |
| 4022 | } | 4032 | } |
| 4023 | EXPORT_SYMBOL_GPL(lockdep_rcu_dereference); | 4033 | EXPORT_SYMBOL_GPL(lockdep_rcu_suspicious); |