From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752256AbcADPNW (ORCPT ); Mon, 4 Jan 2016 10:13:22 -0500 Received: from mail-pa0-f51.google.com ([209.85.220.51]:35397 "EHLO mail-pa0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751374AbcADPNT (ORCPT ); Mon, 4 Jan 2016 10:13:19 -0500 From: Sergey Senozhatsky To: Andrew Morton Cc: Jan Kara , Petr Mladek , linux-kernel@vger.kernel.org, Sergey Senozhatsky , Sergey Senozhatsky Subject: [PATCH] printk: add cpu number to the recursion_msg message Date: Tue, 5 Jan 2016 00:11:34 +0900 Message-Id: <1451920294-1201-1-git-send-email-sergey.senozhatsky@gmail.com> X-Mailer: git-send-email 2.7.0.rc0.20.g4b9ab0e Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org `recursion_bug' occupies 4 bytes to just tell us there was a recent recursion bug (basically 'bool'). Make it a bit more informative and keep in `recursion_bug' smp_processor_id of the CPU (the most recent one) that has caused a recursive printk bug. For instance, the error message will change from BUG: recent printk recursion! to BUG: recent printk recursion on CPU5! Rename `recursion_bug' to `recursion_bug_cpu'. Signed-off-by: Sergey Senozhatsky --- kernel/printk/printk.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 1fc89ba..a578653 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -1662,7 +1662,7 @@ asmlinkage int vprintk_emit(int facility, int level, const char *dict, size_t dictlen, const char *fmt, va_list args) { - static int recursion_bug; + static int recursion_bug_cpu = -1; static char textbuf[LOG_LINE_MAX]; char *text = textbuf; size_t text_len = 0; @@ -1699,7 +1699,7 @@ asmlinkage int vprintk_emit(int facility, int level, * it can be printed at the next appropriate moment: */ if (!oops_in_progress && !lockdep_recursing(current)) { - recursion_bug = 1; + recursion_bug_cpu = this_cpu; local_irq_restore(flags); return 0; } @@ -1710,15 +1710,18 @@ asmlinkage int vprintk_emit(int facility, int level, raw_spin_lock(&logbuf_lock); logbuf_cpu = this_cpu; - if (unlikely(recursion_bug)) { - static const char recursion_msg[] = - "BUG: recent printk recursion!"; + if (unlikely(recursion_bug_cpu != -1)) { + static char recursion_msg[41]; + size_t len; + + len = sprintf(recursion_msg, + "BUG: recent printk recursion on CPU%d!", + recursion_bug_cpu); - recursion_bug = 0; + recursion_bug_cpu = -1; /* emit KERN_CRIT message */ printed_len += log_store(0, 2, LOG_PREFIX|LOG_NEWLINE, 0, - NULL, 0, recursion_msg, - strlen(recursion_msg)); + NULL, 0, recursion_msg, len); } nmi_message_lost = get_nmi_message_lost(); -- 2.7.0.rc0.20.g4b9ab0e