kernel: write to all registered consoles with printk()

This commit is contained in:
2023-05-06 21:32:19 +01:00
parent f52ca2f1e2
commit 94ea756b31
3 changed files with 29 additions and 4 deletions

View File

@@ -29,11 +29,23 @@ kern_status_t console_unregister(struct console *con)
spin_lock_irqsave(&consoles_lock, &flags);
queue_delete(&consoles, &con->c_list);
spin_unlock_irqrestore(&consoles_lock, flags);
return KERN_OK;
}
struct queue *get_consoles(unsigned long *flags)
{
spin_lock_irqsave(&consoles_lock, flags);
return &consoles;
}
void put_consoles(struct queue *consoles, unsigned long flags)
{
(void)consoles;
spin_unlock_irqrestore(&consoles_lock, flags);
}
void console_write(struct console *con, const char *s, unsigned int len)
{
if (con->c_write) {

View File

@@ -21,11 +21,21 @@ static unsigned int log_buffer_writep = 0;
static void flush_log_buffer(void)
{
/*
if (!early_console) {
return;
}
console_write(early_console, log_buffer + log_buffer_readp, log_buffer_writep - log_buffer_readp);
*/
unsigned long flags;
struct queue *consoles = get_consoles(&flags);
queue_foreach(struct console, con, consoles, c_list) {
console_write(con, log_buffer + log_buffer_readp, log_buffer_writep - log_buffer_readp);
}
put_consoles(consoles, flags);
log_buffer_readp = log_buffer_writep;
}
@@ -41,7 +51,7 @@ static void save_log_message(const char *msg)
if (msg[i] == '\0') {
break;
}
log_buffer[log_buffer_writep++] = msg[i++];
}
}
@@ -73,6 +83,6 @@ int printk(const char *format, ...)
spin_unlock_irqrestore(&log_buffer_lock, flags);
flush_log_buffer();
return 0;
}