mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 14:12:07 +02:00
s390/boot: Introduce ring buffer for boot messages
Collect all boot messages into a ring buffer independent of the current log level. This allows to retain all boot-time messages, which is particularly useful for analyzing early crashes. 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>
This commit is contained in:
parent
bbbaf06123
commit
816b5feaed
|
|
@ -13,6 +13,20 @@
|
|||
|
||||
int boot_console_loglevel = CONFIG_CONSOLE_LOGLEVEL_DEFAULT;
|
||||
bool boot_ignore_loglevel;
|
||||
char boot_rb[PAGE_SIZE * 2];
|
||||
size_t boot_rb_off;
|
||||
|
||||
static void boot_rb_add(const char *str, size_t len)
|
||||
{
|
||||
/* leave double '\0' in the end */
|
||||
size_t avail = sizeof(boot_rb) - boot_rb_off - 1;
|
||||
|
||||
/* store strings separated by '\0' */
|
||||
if (len + 1 > avail)
|
||||
boot_rb_off = 0;
|
||||
strcpy(boot_rb + boot_rb_off, str);
|
||||
boot_rb_off += len + 1;
|
||||
}
|
||||
|
||||
const char hex_asc[] = "0123456789abcdef";
|
||||
|
||||
|
|
@ -229,5 +243,9 @@ void boot_printk(const char *fmt, ...)
|
|||
}
|
||||
out:
|
||||
va_end(args);
|
||||
boot_console_earlyprintk(buf);
|
||||
len = strlen(buf);
|
||||
if (len) {
|
||||
boot_rb_add(buf, len);
|
||||
boot_console_earlyprintk(buf);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,4 +15,17 @@ extern unsigned long ipl_cert_list_size;
|
|||
extern unsigned long early_ipl_comp_list_addr;
|
||||
extern unsigned long early_ipl_comp_list_size;
|
||||
|
||||
extern char boot_rb[PAGE_SIZE * 2];
|
||||
extern size_t boot_rb_off;
|
||||
|
||||
#define boot_rb_foreach(cb) \
|
||||
do { \
|
||||
size_t off = boot_rb_off + strlen(boot_rb + boot_rb_off) + 1; \
|
||||
size_t len; \
|
||||
for (; off < sizeof(boot_rb) && (len = strlen(boot_rb + off)); off += len + 1) \
|
||||
cb(boot_rb + off); \
|
||||
for (off = 0; off < boot_rb_off && (len = strlen(boot_rb + off)); off += len + 1) \
|
||||
cb(boot_rb + off); \
|
||||
} while (0)
|
||||
|
||||
#endif /* _ASM_S390_BOOT_DATA_H */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user