Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d91de74 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull printk updates from Petr Mladek:

 - Add Petr Mladek, Sergey Senozhatsky as printk maintainers, and Steven
   Rostedt as the printk reviewer. This idea came up after the
   discussion about printk issues at Kernel Summit. It was formulated
   and discussed at lkml[1].

 - Extend a lock-less NMI per-cpu buffers idea to handle recursive
   printk() calls by Sergey Senozhatsky[2]. It is the first step in
   sanitizing printk as discussed at Kernel Summit.

   The change allows to see messages that would normally get ignored or
   would cause a deadlock.

   Also it allows to enable lockdep in printk(). This already paid off.
   The testing in linux-next helped to discover two old problems that
   were hidden before[3][4].

 - Remove unused parameter by Sergey Senozhatsky. Clean up after a past
   change.

[1] http://lkml.kernel.org/r/1481798878-31898-1-git-send-email-pmladek@suse.com
[2] http://lkml.kernel.org/r/20161227141611.940-1-sergey.senozhatsky@gmail.com
[3] http://lkml.kernel.org/r/20170215044332.30449-1-sergey.senozhatsky@gmail.com
[4] http://lkml.kernel.org/r/20170217015932.11898-1-sergey.senozhatsky@gmail.com

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk:
  printk: drop call_console_drivers() unused param
  printk: convert the rest to printk-safe
  printk: remove zap_locks() function
  printk: use printk_safe buffers in printk
  printk: report lost messages in printk safe/nmi contexts
  printk: always use deferred printk when flush printk_safe lines
  printk: introduce per-cpu safe_print seq buffer
  printk: rename nmi.c and exported api
  printk: use vprintk_func in vprintk()
  MAINTAINERS: Add printk maintainers
parents 6ef192f2 d9c23523
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -9997,6 +9997,14 @@ S: Supported
F:	Documentation/preempt-locking.txt
F:	include/linux/preempt.h

PRINTK
M:	Petr Mladek <pmladek@suse.com>
M:	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
R:	Steven Rostedt <rostedt@goodmis.org>
S:	Maintained
F:	kernel/printk/
F:	include/linux/printk.h

PRISM54 WIRELESS DRIVER
M:	"Luis R. Rodriguez" <mcgrof@gmail.com>
L:	linux-wireless@vger.kernel.org
+15 −6
Original line number Diff line number Diff line
@@ -147,17 +147,11 @@ void early_printk(const char *s, ...) { }
#endif

#ifdef CONFIG_PRINTK_NMI
extern void printk_nmi_init(void);
extern void printk_nmi_enter(void);
extern void printk_nmi_exit(void);
extern void printk_nmi_flush(void);
extern void printk_nmi_flush_on_panic(void);
#else
static inline void printk_nmi_init(void) { }
static inline void printk_nmi_enter(void) { }
static inline void printk_nmi_exit(void) { }
static inline void printk_nmi_flush(void) { }
static inline void printk_nmi_flush_on_panic(void) { }
#endif /* PRINTK_NMI */

#ifdef CONFIG_PRINTK
@@ -209,6 +203,9 @@ 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 void printk_safe_init(void);
extern void printk_safe_flush(void);
extern void printk_safe_flush_on_panic(void);
#else
static inline __printf(1, 0)
int vprintk(const char *s, va_list args)
@@ -268,6 +265,18 @@ static inline void dump_stack_print_info(const char *log_lvl)
static inline void show_regs_print_info(const char *log_lvl)
{
}

static inline void printk_safe_init(void)
{
}

static inline void printk_safe_flush(void)
{
}

static inline void printk_safe_flush_on_panic(void)
{
}
#endif

extern asmlinkage void dump_stack(void) __cold;
+9 −7
Original line number Diff line number Diff line
@@ -861,17 +861,19 @@ config LOG_CPU_MAX_BUF_SHIFT
		     13 =>   8 KB for each CPU
		     12 =>   4 KB for each CPU

config NMI_LOG_BUF_SHIFT
	int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
config PRINTK_SAFE_LOG_BUF_SHIFT
	int "Temporary per-CPU printk log buffer size (12 => 4KB, 13 => 8KB)"
	range 10 21
	default 13
	depends on PRINTK_NMI
	depends on PRINTK
	help
	  Select the size of a per-CPU buffer where NMI messages are temporary
	  stored. They are copied to the main log buffer in a safe context
	  to avoid a deadlock. The value defines the size as a power of 2.
	  Select the size of an alternate printk per-CPU buffer where messages
	  printed from usafe contexts are temporary stored. One example would
	  be NMI messages, another one - printk recursion. The messages are
	  copied to the main log buffer in a safe context to avoid a deadlock.
	  The value defines the size as a power of 2.

	  NMI messages are rare and limited. The largest one is when
	  Those messages are rare and limited. The largest one is when
	  a backtrace is printed. It usually fits into 4KB. Select
	  8KB if you want to be on the safe side.

+1 −1
Original line number Diff line number Diff line
@@ -581,7 +581,7 @@ asmlinkage __visible void __init start_kernel(void)
	timekeeping_init();
	time_init();
	sched_clock_postinit();
	printk_nmi_init();
	printk_safe_init();
	perf_event_init();
	profile_init();
	call_function_init();
+1 −1
Original line number Diff line number Diff line
@@ -916,7 +916,7 @@ void crash_kexec(struct pt_regs *regs)
	old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, this_cpu);
	if (old_cpu == PANIC_CPU_INVALID) {
		/* This is the 1st CPU which comes here, so go ahead. */
		printk_nmi_flush_on_panic();
		printk_safe_flush_on_panic();
		__crash_kexec(regs);

		/*
Loading