Merge tag 'printk-for-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux
Pull printk updates from Petr Mladek: - Optionally, provide an index of possible printk messages via <debugfs>/printk/index/. It can be used when monitoring important kernel messages on a farm of various hosts. The monitor has to be updated when some messages has changed or are not longer available by a newly deployed kernel. - Add printk.console_no_auto_verbose boot parameter. It allows to generate crash dump even with slow consoles in a reasonable time frame. - Remove printk_safe buffers. The messages are always stored directly to the main logbuffer, even in NMI or recursive context. Also it allows to serialize syslog operations by a mutex instead of a spin lock. - Misc clean up and build fixes. * tag 'printk-for-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux: printk/index: Fix -Wunused-function warning lib/nmi_backtrace: Serialize even messages about idle CPUs printk: Add printk.console_no_auto_verbose boot parameter printk: Remove console_silent() lib/test_scanf: Handle n_bits == 0 in random tests printk: syslog: close window between wait and read printk: convert @syslog_lock to mutex printk: remove NMI tracking printk: remove safe buffers printk: track/limit recursion lib/nmi_backtrace: explicitly serialize banner and regs printk: Move the printk() kerneldoc comment to its new home printk/index: Fix warning about missing prototypes MIPS/asm/printk: Fix build failure caused by printk printk: index: Add indexing support to dev_printk printk: Userspace format indexing support printk: Rework parse_prefix into printk_parse_prefix printk: Straighten out log_flags into printk_info_flags string_helpers: Escape double quotes in escape_special printk/console: Check consistent sequence number when handling race in console_unlock()
This commit is contained in:
+7
-6
@@ -75,12 +75,6 @@ void nmi_trigger_cpumask_backtrace(const cpumask_t *mask,
|
||||
touch_softlockup_watchdog();
|
||||
}
|
||||
|
||||
/*
|
||||
* Force flush any remote buffers that might be stuck in IRQ context
|
||||
* and therefore could not run their irq_work.
|
||||
*/
|
||||
printk_safe_flush();
|
||||
|
||||
clear_bit_unlock(0, &backtrace_flag);
|
||||
put_cpu();
|
||||
}
|
||||
@@ -92,8 +86,14 @@ module_param(backtrace_idle, bool, 0644);
|
||||
bool nmi_cpu_backtrace(struct pt_regs *regs)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
unsigned long flags;
|
||||
|
||||
if (cpumask_test_cpu(cpu, to_cpumask(backtrace_mask))) {
|
||||
/*
|
||||
* Allow nested NMI backtraces while serializing
|
||||
* against other CPUs.
|
||||
*/
|
||||
printk_cpu_lock_irqsave(flags);
|
||||
if (!READ_ONCE(backtrace_idle) && regs && cpu_in_idle(instruction_pointer(regs))) {
|
||||
pr_warn("NMI backtrace for cpu %d skipped: idling at %pS\n",
|
||||
cpu, (void *)instruction_pointer(regs));
|
||||
@@ -104,6 +104,7 @@ bool nmi_cpu_backtrace(struct pt_regs *regs)
|
||||
else
|
||||
dump_stack();
|
||||
}
|
||||
printk_cpu_unlock_irqrestore(flags);
|
||||
cpumask_clear_cpu(cpu, to_cpumask(backtrace_mask));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -361,6 +361,9 @@ static bool escape_special(unsigned char c, char **dst, char *end)
|
||||
case '\e':
|
||||
to = 'e';
|
||||
break;
|
||||
case '"':
|
||||
to = '"';
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -474,6 +477,7 @@ static bool escape_hex(unsigned char c, char **dst, char *end)
|
||||
* '\t' - horizontal tab
|
||||
* '\v' - vertical tab
|
||||
* %ESCAPE_SPECIAL:
|
||||
* '\"' - double quote
|
||||
* '\\' - backslash
|
||||
* '\a' - alert (BEL)
|
||||
* '\e' - escape
|
||||
|
||||
@@ -140,13 +140,13 @@ static const struct test_string_2 escape0[] __initconst = {{
|
||||
},{
|
||||
.in = "\\h\\\"\a\e\\",
|
||||
.s1 = {{
|
||||
.out = "\\\\h\\\\\"\\a\\e\\\\",
|
||||
.out = "\\\\h\\\\\\\"\\a\\e\\\\",
|
||||
.flags = ESCAPE_SPECIAL,
|
||||
},{
|
||||
.out = "\\\\\\150\\\\\\042\\a\\e\\\\",
|
||||
.out = "\\\\\\150\\\\\\\"\\a\\e\\\\",
|
||||
.flags = ESCAPE_SPECIAL | ESCAPE_OCTAL,
|
||||
},{
|
||||
.out = "\\\\\\x68\\\\\\x22\\a\\e\\\\",
|
||||
.out = "\\\\\\x68\\\\\\\"\\a\\e\\\\",
|
||||
.flags = ESCAPE_SPECIAL | ESCAPE_HEX,
|
||||
},{
|
||||
/* terminator */
|
||||
@@ -157,10 +157,10 @@ static const struct test_string_2 escape0[] __initconst = {{
|
||||
.out = "\eb \\C\007\"\x90\\r]",
|
||||
.flags = ESCAPE_SPACE,
|
||||
},{
|
||||
.out = "\\eb \\\\C\\a\"\x90\r]",
|
||||
.out = "\\eb \\\\C\\a\\\"\x90\r]",
|
||||
.flags = ESCAPE_SPECIAL,
|
||||
},{
|
||||
.out = "\\eb \\\\C\\a\"\x90\\r]",
|
||||
.out = "\\eb \\\\C\\a\\\"\x90\\r]",
|
||||
.flags = ESCAPE_SPACE | ESCAPE_SPECIAL,
|
||||
},{
|
||||
.out = "\\033\\142\\040\\134\\103\\007\\042\\220\\015\\135",
|
||||
@@ -169,10 +169,10 @@ static const struct test_string_2 escape0[] __initconst = {{
|
||||
.out = "\\033\\142\\040\\134\\103\\007\\042\\220\\r\\135",
|
||||
.flags = ESCAPE_SPACE | ESCAPE_OCTAL,
|
||||
},{
|
||||
.out = "\\e\\142\\040\\\\\\103\\a\\042\\220\\015\\135",
|
||||
.out = "\\e\\142\\040\\\\\\103\\a\\\"\\220\\015\\135",
|
||||
.flags = ESCAPE_SPECIAL | ESCAPE_OCTAL,
|
||||
},{
|
||||
.out = "\\e\\142\\040\\\\\\103\\a\\042\\220\\r\\135",
|
||||
.out = "\\e\\142\\040\\\\\\103\\a\\\"\\220\\r\\135",
|
||||
.flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_OCTAL,
|
||||
},{
|
||||
.out = "\eb \\C\007\"\x90\r]",
|
||||
|
||||
+2
-2
@@ -271,7 +271,7 @@ static u32 __init next_test_random(u32 max_bits)
|
||||
{
|
||||
u32 n_bits = hweight32(prandom_u32_state(&rnd_state)) % (max_bits + 1);
|
||||
|
||||
return prandom_u32_state(&rnd_state) & (UINT_MAX >> (32 - n_bits));
|
||||
return prandom_u32_state(&rnd_state) & GENMASK(n_bits, 0);
|
||||
}
|
||||
|
||||
static unsigned long long __init next_test_random_ull(void)
|
||||
@@ -280,7 +280,7 @@ static unsigned long long __init next_test_random_ull(void)
|
||||
u32 n_bits = (hweight32(rand1) * 3) % 64;
|
||||
u64 val = (u64)prandom_u32_state(&rnd_state) * rand1;
|
||||
|
||||
return val & (ULLONG_MAX >> (64 - n_bits));
|
||||
return val & GENMASK_ULL(n_bits, 0);
|
||||
}
|
||||
|
||||
#define random_for_type(T) \
|
||||
|
||||
Reference in New Issue
Block a user