]> 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 9c21110be72801393f9a8c291c9b0817feaf4057..cd96890f8e606dff3f5aee832755f2c7039be109 100644 (file)
@@ -203,7 +203,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);
 }