]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
fix: restore immediate VGA flush in vga_write_buf to fix ring3 display hang
authorTulio A M Mendes <[email protected]>
Sat, 14 Feb 2026 06:54:50 +0000 (03:54 -0300)
committerTulio A M Mendes <[email protected]>
Sat, 14 Feb 2026 06:54:50 +0000 (03:54 -0300)
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

index 3b550d33d9e84ea04f66580240b6e73263b7afd1..52e4cf77706f06db120afb39bc1f18e1ea87afbe 100644 (file)
@@ -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);
 }