| From 7d5c881a131f54d2c486651598e96a9d5905775c Mon Sep 17 00:00:00 2001 |
| From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> |
| Date: Sat, 18 Feb 2017 03:42:54 -0800 |
| Subject: [PATCH] printk: use rcuidle console tracepoint |
| |
| commit fc98c3c8c9dcafd67adcce69e6ce3191d5306c9c upstream. |
| |
| Use rcuidle console tracepoint because, apparently, it may be issued |
| from an idle CPU: |
| |
| hw-breakpoint: Failed to enable monitor mode on CPU 0. |
| hw-breakpoint: CPU 0 failed to disable vector catch |
| |
| =============================== |
| [ ERR: suspicious RCU usage. ] |
| 4.10.0-rc8-next-20170215+ #119 Not tainted |
| ------------------------------- |
| ./include/trace/events/printk.h:32 suspicious rcu_dereference_check() usage! |
| |
| other info that might help us debug this: |
| |
| RCU used illegally from idle CPU! |
| rcu_scheduler_active = 2, debug_locks = 0 |
| RCU used illegally from extended quiescent state! |
| 2 locks held by swapper/0/0: |
| #0: (cpu_pm_notifier_lock){......}, at: [<c0237e2c>] cpu_pm_exit+0x10/0x54 |
| #1: (console_lock){+.+.+.}, at: [<c01ab350>] vprintk_emit+0x264/0x474 |
| |
| stack backtrace: |
| CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.10.0-rc8-next-20170215+ #119 |
| Hardware name: Generic OMAP4 (Flattened Device Tree) |
| console_unlock |
| vprintk_emit |
| vprintk_default |
| printk |
| reset_ctrl_regs |
| dbg_cpu_pm_notify |
| notifier_call_chain |
| cpu_pm_exit |
| omap_enter_idle_coupled |
| cpuidle_enter_state |
| cpuidle_enter_state_coupled |
| do_idle |
| cpu_startup_entry |
| start_kernel |
| |
| This RCU warning, however, is suppressed by lockdep_off() in printk(). |
| lockdep_off() increments the ->lockdep_recursion counter and thus |
| disables RCU_LOCKDEP_WARN() and debug_lockdep_rcu_enabled(), which want |
| lockdep to be enabled "current->lockdep_recursion == 0". |
| |
| Link: http://lkml.kernel.org/r/20170217015932.11898-1-sergey.senozhatsky@gmail.com |
| Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> |
| Reported-by: Tony Lindgren <tony@atomide.com> |
| Tested-by: Tony Lindgren <tony@atomide.com> |
| Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> |
| Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Cc: Petr Mladek <pmladek@suse.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Tony Lindgren <tony@atomide.com> |
| Cc: Russell King <rmk@armlinux.org.uk> |
| Cc: <stable@vger.kernel.org> [3.4+] |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c |
| index eea6dbc2d8cf..9454f81edbed 100644 |
| --- a/kernel/printk/printk.c |
| +++ b/kernel/printk/printk.c |
| @@ -1567,7 +1567,7 @@ static void call_console_drivers(int level, |
| { |
| struct console *con; |
| |
| - trace_console(text, len); |
| + trace_console_rcuidle(text, len); |
| |
| if (!console_drivers) |
| return; |
| -- |
| 2.12.0 |
| |