[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] console: Do not duplicate early printk messages on conring flush
commit f6f8fbb25865e2d41b6e91d255ab51a173b432ce Author: Michal Orzel <michal.orzel@xxxxxxx> AuthorDate: Tue Jun 17 09:19:40 2025 +0200 Commit: Stefano Stabellini <stefano.stabellini@xxxxxxx> CommitDate: Tue Jun 17 10:59:04 2025 -0700 console: Do not duplicate early printk messages on conring flush Commit f6d1bfa16052 introduced flushing conring in console_init_preirq(). However, when CONFIG_EARLY_PRINTK is enabled, the early boot messages had already been sent to serial before main console initialization. This results in all the early boot messages being duplicated. Change conring_flush() to accept argument listing devices to which to flush conring. We don't want to send to serial at console initialization when using early printk, but we want these messages to be send at conring dump triggered by keyhandler. Fixes: f6d1bfa16052 ("xen/console: introduce conring_flush()") Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> --- xen/drivers/char/console.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 9a9836ba91..5879e31786 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -453,9 +453,9 @@ void console_serial_puts(const char *s, size_t nr) } /* - * Flush contents of the conring to the physical console devices. + * Flush contents of the conring to the selected console devices. */ -static int conring_flush(void) +static int conring_flush(unsigned int flags) { uint32_t idx, len, sofar, c; unsigned int order; @@ -479,7 +479,7 @@ static int conring_flush(void) c += len; } - console_send(buf, sofar, CONSOLE_SERIAL | CONSOLE_VIDEO | CONSOLE_PV); + console_send(buf, sofar, flags); free_xenheap_pages(buf, order); @@ -491,7 +491,7 @@ static void cf_check conring_dump_keyhandler(unsigned char key) int rc; printk("'%c' pressed -> dumping console ring buffer (dmesg)\n", key); - rc = conring_flush(); + rc = conring_flush(CONSOLE_SERIAL | CONSOLE_VIDEO | CONSOLE_PV); if ( rc ) printk("failed to dump console ring buffer: %d\n", rc); } @@ -1042,6 +1042,7 @@ void __init console_init_preirq(void) { char *p; int sh; + unsigned int flags = CONSOLE_SERIAL | CONSOLE_VIDEO | CONSOLE_PV; serial_init_preirq(); @@ -1084,8 +1085,15 @@ void __init console_init_preirq(void) serial_set_rx_handler(sercon_handle, serial_rx); pv_console_set_rx_handler(serial_rx); - /* NB: send conring contents to all enabled physical consoles, if any */ - conring_flush(); + /* + * NB: send conring contents to all enabled physical consoles, if any. + * Skip serial if CONFIG_EARLY_PRINTK is enabled, which means the early + * messages have already been sent to serial. + */ + if ( IS_ENABLED(CONFIG_EARLY_PRINTK) ) + flags &= ~CONSOLE_SERIAL; + + conring_flush(flags); /* HELLO WORLD --- start-of-day banner text. */ nrspin_lock(&console_lock); -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |