Skip to content

Commit

Permalink
s390/boot: Dump message ring buffer on crash with bootdebug
Browse files Browse the repository at this point in the history
Dump the boot message ring buffer when a crash occurs during boot, but
only if bootdebug is enabled. This helps assist in analyzing boot-time
issues by providing additional debugging information.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
  • Loading branch information
Vasily Gorbik authored and Alexander Gordeev committed Jan 26, 2025
1 parent b79015a commit b2a992a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/s390/boot/boot.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ int __printf(1, 2) boot_printk(const char *fmt, ...);
void print_stacktrace(unsigned long sp);
void error(char *m);
int get_random(unsigned long limit, unsigned long *value);
void boot_rb_dump(void);

#ifndef boot_fmt
#define boot_fmt(fmt) fmt
Expand Down
2 changes: 2 additions & 0 deletions arch/s390/boot/pgm_check_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ void print_pgm_check_info(void)
unsigned long *gpregs = (unsigned long *)get_lowcore()->gpregs_save_area;
struct psw_bits *psw = &psw_bits(get_lowcore()->psw_save_area);

if (bootdebug)
boot_rb_dump();
boot_emerg("Linux version %s\n", kernel_version);
if (!is_prot_virt_guest() && early_command_line[0])
boot_emerg("Kernel command line: %s\n", early_command_line);
Expand Down
18 changes: 18 additions & 0 deletions arch/s390/boot/printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,24 @@ static void boot_rb_add(const char *str, size_t len)
boot_rb_off += len + 1;
}

static void print_rb_entry(const char *str)
{
sclp_early_printk(printk_skip_level(str));
}

static bool debug_messages_printed(void)
{
return boot_earlyprintk && (boot_ignore_loglevel || boot_console_loglevel > LOGLEVEL_DEBUG);
}

void boot_rb_dump(void)
{
if (debug_messages_printed())
return;
sclp_early_printk("Boot messages ring buffer:\n");
boot_rb_foreach(print_rb_entry);
}

const char hex_asc[] = "0123456789abcdef";

static char *as_hex(char *dst, unsigned long val, int pad)
Expand Down

0 comments on commit b2a992a

Please sign in to comment.