From: Alexander Potapenko <glider@google.com>
To: akpm@linux-foundation.org, pmladek@suse.com, mingo@kernel.org
Cc: bo.he@intel.com, yanmin_zhang@linux.intel.com,
psodagud@quicinc.com, dvyukov@google.com, elver@google.com,
linux-kernel@vger.kernel.org, ryabinin.a.a@gmail.com,
Alexander Potapenko <glider@google.com>,
he@google.com
Subject: [PATCH v2 1/2] printk: introduce dump_stack_lvl()
Date: Thu, 6 May 2021 12:54:04 +0200 [thread overview]
Message-ID: <20210506105405.3535023-1-glider@google.com> (raw)
dump_stack() is used for many different cases, which may require a log
level consistent with other kernel messages surrounding the dump_stack()
call.
Without that, certain systems that are configured to ignore the default
level messages will miss stack traces in critical error reports.
This patch introduces dump_stack_lvl() that behaves similarly to
dump_stack(), but accepts a custom log level.
The old dump_stack() becomes equal to dump_stack_lvl(KERN_DEFAULT).
A somewhat similar patch has been proposed in 2012:
https://lore.kernel.org/lkml/1332493269.2359.9.camel@hebo/
, but wasn't merged.
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: he, bo <bo.he@intel.com>
Cc: Yanmin Zhang <yanmin_zhang@linux.intel.com>
Cc: Prasad Sodagudi <psodagud@quicinc.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Marco Elver <elver@google.com>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Alexander Potapenko <glider@google.com>
---
v2:
-- export dump_stack_lvl() (spotted by Marco Elver)
---
include/linux/printk.h | 1 +
lib/dump_stack.c | 20 +++++++++++++-------
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/include/linux/printk.h b/include/linux/printk.h
index fe7eb2351610..abe274305d79 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -206,6 +206,7 @@ void __init setup_log_buf(int early);
__printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...);
void dump_stack_print_info(const char *log_lvl);
void show_regs_print_info(const char *log_lvl);
+extern asmlinkage void dump_stack_lvl(const char *log_lvl) __cold;
extern asmlinkage void dump_stack(void) __cold;
extern void printk_safe_flush(void);
extern void printk_safe_flush_on_panic(void);
diff --git a/lib/dump_stack.c b/lib/dump_stack.c
index f5a33b6f773f..586e3f2c6a15 100644
--- a/lib/dump_stack.c
+++ b/lib/dump_stack.c
@@ -73,10 +73,10 @@ void show_regs_print_info(const char *log_lvl)
dump_stack_print_info(log_lvl);
}
-static void __dump_stack(void)
+static void __dump_stack(const char *log_lvl)
{
- dump_stack_print_info(KERN_DEFAULT);
- show_stack(NULL, NULL, KERN_DEFAULT);
+ dump_stack_print_info(log_lvl);
+ show_stack(NULL, NULL, log_lvl);
}
/**
@@ -87,7 +87,7 @@ static void __dump_stack(void)
#ifdef CONFIG_SMP
static atomic_t dump_lock = ATOMIC_INIT(-1);
-asmlinkage __visible void dump_stack(void)
+asmlinkage __visible void dump_stack_lvl(const char *log_lvl)
{
unsigned long flags;
int was_locked;
@@ -117,7 +117,7 @@ asmlinkage __visible void dump_stack(void)
goto retry;
}
- __dump_stack();
+ __dump_stack(log_lvl);
if (!was_locked)
atomic_set(&dump_lock, -1);
@@ -125,9 +125,15 @@ asmlinkage __visible void dump_stack(void)
local_irq_restore(flags);
}
#else
-asmlinkage __visible void dump_stack(void)
+asmlinkage __visible void dump_stack_lvl(const char *log_lvl)
{
- __dump_stack();
+ __dump_stack(log_lvl);
}
#endif
+EXPORT_SYMBOL(dump_stack_lvl);
+
+asmlinkage __visible void dump_stack(void)
+{
+ dump_stack_lvl(KERN_DEFAULT);
+}
EXPORT_SYMBOL(dump_stack);
--
2.31.1.527.g47e6f16901-goog
next reply other threads:[~2021-05-06 10:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-06 10:54 Alexander Potapenko [this message]
2021-05-06 10:54 ` [PATCH v2 2/2] kasan: use dump_stack_lvl(KERN_ERR) to print stacks Alexander Potapenko
2021-05-06 11:11 ` Marco Elver
2021-05-06 11:10 ` [PATCH v2 1/2] printk: introduce dump_stack_lvl() Marco Elver
2021-05-09 0:52 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210506105405.3535023-1-glider@google.com \
--to=glider@google.com \
--cc=akpm@linux-foundation.org \
--cc=bo.he@intel.com \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=he@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=pmladek@suse.com \
--cc=psodagud@quicinc.com \
--cc=ryabinin.a.a@gmail.com \
--cc=yanmin_zhang@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.