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