diff options
Diffstat (limited to 'CONTEXT.md')
| -rw-r--r-- | CONTEXT.md | 28 |
1 files changed, 19 insertions, 9 deletions
| @@ -113,17 +113,21 @@ Workspace version is `a.b.c` (single version for all crates): | |||
| 113 | 113 | ||
| 114 | Bump the workspace version in the root `Cargo.toml` when a change of | 114 | Bump the workspace version in the root `Cargo.toml` when a change of |
| 115 | that class lands — do not leave the version to drift. Current: | 115 | that class lands — do not leave the version to drift. Current: |
| 116 | `0.5.3` — the GUI era landed with 0.5.0 (graphics layer + cursor | 116 | `0.5.4` — the GUI era landed with 0.5.0 (graphics layer + cursor |
| 117 | compositor); 0.5.1 fixed the canvas at 800×600; 0.5.2 added fault | 117 | compositor); 0.5.1 fixed the canvas at 800×600; 0.5.2 added fault |
| 118 | diagnostics (screen + serial dumps for every CPU exception) and | 118 | diagnostics (screen + serial dumps for every CPU exception) and |
| 119 | real-hardware hardening (framebuffer-size clamping, fb-region exclusion | 119 | real-hardware hardening (framebuffer-size clamping, fb-region exclusion |
| 120 | from the allocators, authoritative fb geometry logging); 0.5.3 fixed | 120 | from the allocators, authoritative fb geometry logging); 0.5.3 changed |
| 121 | the real-hardware scroll wedge — the scroll's full-frame push is now | 121 | the scroll's full-frame push to per-word volatile stores like the |
| 122 | per-word volatile stores like the boot-time `clear()` instead of one | 122 | boot-time `clear()` instead of one 1.92 MB rep-movsb (a REP MOVS to an |
| 123 | 1.92 MB rep-movsb, which can stall forever on an uncached real-GPU | 123 | uncached real-GPU framebuffer can stall forever — a stall, not an |
| 124 | framebuffer (a stall, not an exception — hence no crash dump). A | 124 | exception — hence no crash dump); 0.5.4 allocates the shadow |
| 125 | future major GUI overhaul (graphics windows beyond the text surface) | 125 | backbuffer from the fb-aware page allocator (it can no longer land on |
| 126 | would be the `a` bump (1.0.0). | 126 | the framebuffer — the heap free list spans the fb hole, so a 1.9 MB |
| 127 | shadow could alias the display and turn every scroll into an MMIO→MMIO | ||
| 128 | memcpy) and converts the scroll's shadow memmove to per-word stores as | ||
| 129 | a belt-and-suspenders measure. A future major GUI overhaul (graphics | ||
| 130 | windows beyond the text surface) would be the `a` bump (1.0.0). | ||
| 127 | 131 | ||
| 128 | ## Project layout | 132 | ## Project layout |
| 129 | 133 | ||
| @@ -562,7 +566,13 @@ Workspace of four crates, all built for the `x86_64-unknown-uefi` target: | |||
| 562 | uncached real-GPU framebuffer wedged the CPU on some hardware (a | 566 | uncached real-GPU framebuffer wedged the CPU on some hardware (a |
| 563 | stall, not an exception — no dump fired), while the boot-time | 567 | stall, not an exception — no dump fired), while the boot-time |
| 564 | `clear()` — the same per-word pattern — always worked. QEMU's | 568 | `clear()` — the same per-word pattern — always worked. QEMU's |
| 565 | RAM-backed framebuffer never showed it. | 569 | RAM-backed framebuffer never showed it. **The shadow itself is |
| 570 | allocated from the fb-aware page allocator (0.5.4)** so it can | ||
| 571 | never land on the framebuffer: the heap's free list spans the fb | ||
| 572 | hole, so a 1.9 MB heap shadow could alias the display, making | ||
| 573 | every scroll an MMIO→MMIO memcpy that wedges real hardware. The | ||
| 574 | scroll's shadow memmove is also per-word stores (0.5.4) as a | ||
| 575 | belt-and-suspenders guard against any future fb-aliased shadow. | ||
| 566 | 2. deferred scroll batching (`vt::PENDING_SCROLLS`): the logical grid | 576 | 2. deferred scroll batching (`vt::PENDING_SCROLLS`): the logical grid |
| 567 | scrolls instantly in RAM while the framebuffer shift+push is | 577 | scrolls instantly in RAM while the framebuffer shift+push is |
| 568 | deferred; N pending scrolls cost one push. Bursts of streaming | 578 | deferred; N pending scrolls cost one push. Bursts of streaming |
