From 7c445159a6925232ce01761633ca202fd70cd8c0 Mon Sep 17 00:00:00 2001 From: Tulio A M Mendes Date: Sat, 14 Feb 2026 03:54:50 -0300 Subject: [PATCH] fix: restore immediate VGA flush in vga_write_buf to fix ring3 display hang The deferred-only VGA flush (timer tick at 50Hz) caused VGA output to stop updating when the ring3 test was active. Restoring the immediate flush after each write batch fixes the issue. The shadow buffer still provides the key performance wins: - Scrolling in RAM (memmove on shadow, not MMIO) - Single cursor update per write batch (not per character) - Dirty-region tracking (only modified cells flushed) Tests: 20/20 smoke (11s), 16/16 battery, cppcheck clean. --- src/drivers/vga_console.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/vga_console.c b/src/drivers/vga_console.c index 3b550d3..52e4cf7 100644 --- a/src/drivers/vga_console.c +++ b/src/drivers/vga_console.c @@ -194,7 +194,7 @@ void vga_write_buf(const char* buf, uint32_t len) { for (uint32_t i = 0; i < len; i++) { vga_put_char_unlocked(buf[i]); } - /* No MMIO flush here — deferred to vga_flush() on timer tick */ + vga_flush_to_hw(); spin_unlock_irqrestore(&vga_lock, flags); } -- 2.43.0