[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] console: Do not duplicate early printk messages on conring flush
On Tue, Jun 17, 2025 at 09:19:40AM +0200, Michal Orzel wrote: > 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: Denis Mukhin <dmukhin@xxxxxxxx> > --- > 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 9a9836ba91e7..5879e31786ba 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); > -- > 2.25.1 > >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |