Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
| Comment: | Merge 6.3: an interrupt-driven console on Zephyr's UART drivers
Reviewed against docs/tasks/6.3.md; verdict merge. 6.3a: the devicetree generator emits interrupt cells, UART_INTERRUPT_DRIVEN is set, the shim gains IRQ_CONNECT and irq_enable, an arm64 ISR table is generated from .intList in Crystal, the console provider fills a receive ring from the driver's callback, the shell idles between keys, and a physical IRQ during a guest exits to Glint and the guest resumes. 6.3b: COM1's IRQ 4 through the IOAPIC, and SVM's INTR intercept with V_INTR_MASKING. Zephyr's sources are unedited. 6.3a is over the ~250 target at 354 changed lines, under the 400 stop; 6.3b is 105. The runner now spaces scripted keys by 10 ms so each key is its own interrupt. The reviewer booted: aarch64 in the seed, cat then console, 'console: interrupt-driven, 24 receive interrupts' (16 + 8 keys); x86_64, console, 8; the x86_64 phase 4 guest still powers off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
4e310cdb5c27949203893f04b5d489a3 |
| User & Date: | x86-1-glint 2026-11-11 02:48:24.826 |
|
2026-11-11
| ||
| 02:48 |
docs/boots: the interrupt-driven console, recorded
Claim: the boots page gains 6.3: Zephyr's PL011 driver runs interrupt-driven, and the console command counts one receive interrupt per key. Passage: the maintainer's request for a recording at each milestone (ocx-console 40c80385db). Demonstration: the cast is the file bin/glint-run wrote on x86-1 at the merge 4e310cdb5c's tree, built inside BQ2's seed; it exited 0 with the lines the entry quotes. Size: one cast, one page entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX check-in: be20685691 user: x86-1-glint tags: trunk | |
| 02:48 |
Merge 6.3: an interrupt-driven console on Zephyr's UART drivers
Reviewed against docs/tasks/6.3.md; verdict merge. 6.3a: the devicetree generator emits interrupt cells, UART_INTERRUPT_DRIVEN is set, the shim gains IRQ_CONNECT and irq_enable, an arm64 ISR table is generated from .intList in Crystal, the console provider fills a receive ring from the driver's callback, the shell idles between keys, and a physical IRQ during a guest exits to Glint and the guest resumes. 6.3b: COM1's IRQ 4 through the IOAPIC, and SVM's INTR intercept with V_INTR_MASKING. Zephyr's sources are unedited. 6.3a is over the ~250 target at 354 changed lines, under the 400 stop; 6.3b is 105. The runner now spaces scripted keys by 10 ms so each key is its own interrupt. The reviewer booted: aarch64 in the seed, cat then console, 'console: interrupt-driven, 24 receive interrupts' (16 + 8 keys); x86_64, console, 8; the x86_64 phase 4 guest still powers off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX check-in: 4e310cdb5c user: x86-1-glint tags: trunk | |
| 02:45 |
6.3b: interrupt-driven COM1 and physical INTR exits from SVM
Claim: Zephyr's unmodified NS16550 connects COM1 IRQ 4 dynamically to vector 0x54 through the IOAPIC, 6.1b's table and Trap.dispatch. Both architectures now consume the receive ring and idle with IRQs unmasked. SVM intercepts physical INTR, using host IF so a guest masking its own IRQs cannot block Glint's console; the run loop services it through the normal dispatcher and resumes the guest. Host IRQs do not consume the guest exit limit. Output remains synchronous on uart_poll_out. Passage: xv6 sections 6.1-6.2, paraphrased because the text was not found: the interrupt handler buffers console input for its reader, while output can wait for transmitter readiness. MOS4/5 sections 5.2.2-5.2.4 describe the polling-to-interrupt step. docs/console-interrupts.md cites Zephyr's Intel64 dynamic connection and QEMU's VMCB INTR bit 0, exit code 0x60, V_INTR_MASKING bit 24 and host-IF handling by name and line. Demonstration: /tmp/glint-6.3/seed is the exact BQ2 namespace command from docs/tasks/4.1a.md with cd /workspace/v54 and its specified environment. /tmp/glint-6.3/seed crystal spec spec/run --example aarch64: 34 pass. /tmp/glint-6.3/seed crystal spec spec/run/glint_run_spec.cr:105 spec/run/glint_run_spec.cr:115: 2 pass. /tmp/glint-6.3/seed crystal spec spec/zephyr --example aarch64: 16 pass. /tmp/glint-6.3/seed crystal spec spec/image_initialization_spec.cr spec/efi_image_spec.cr spec/pe_image_spec.cr spec/small_target_spec.cr: 961 pass, including both images' no-initializer check. Small target: 29846 flash bytes and 52 static RAM bytes. /tmp/glint-6.3/outside crystal spec spec/vcpu_spec.cr spec/zephyr/interrupt_spec.cr: 7 pass, including the packed VMCB offsets, INTR intercept/masking bits and exit decoder, ring and recorded ISR table. The polling-only host shared library now supplies trapping IRQ controller hooks: it resolves production-wrapper symbols but fails if privileged setup is attempted. Its console spec passes, with both unchanged child suites at 11 examples and zero failures/errors; the affected mode, native-table and preload host suites also pass (22 examples). /tmp/glint-6.3/outside crystal spec spec/run --example x86_64: 31 pass. Arm EL2/EL1 and x86 shell boots show "console: interrupt-driven, 8 receive interrupts". Keys during each guest also produce that line after "VM: guest powered off" (20 KiB backed on Arm, 44 KiB on x86). LD_LIBRARY_PATH=/usr/lib64 ZEPHYR_SRC=/workspace/src/zephyr-src crystal spec: 1390 examples, 0 failures/errors, 61 pending (unavailable targets/boot env; architecture boots were separately enabled above). crystal tool format --check: pass. Size: 85 non-spec lines added, 20 removed (105 changed, including source notes), below the approximately 400-line stop. Both images before/after: aarch64 250880/250880 bytes; x86_64 258560/258560 bytes. Largest new image function in this half: glint_irq_route, 390 bytes on x86. The largest new image function across both check-ins remains Arm arch_irq_enable, 600 bytes; no new image function exceeds 2 KiB. No new heap allocation or startup initializer and no edits to upstream Zephyr. The earlier read-only search-boundary violation and the first half's approximate size-target deviation are recorded in the requested report; no additional constraint was left unmet. Co-Authored-By: OpenAI Codex <noreply@openai.com> Signed-off-by: OpenAI Codex <noreply@openai.com> Leaf check-in: b8181d5c01 user: x86-1-glint tags: slice/6.3 | |
| 02:04 |
docs/tasks/6.3.md: an interrupt-driven console, 6.3a and 6.3b
Claim: the task for 6.3, split as the slice allows: 6.3a extends Track Z's devicetree generator with interrupt cells, sets UART_INTERRUPT_DRIVEN, adds IRQ_CONNECT and irq_enable to the shim, a receive ring to the console provider, a generated arm64 ISR table, and the guest's physical-IRQ exit; 6.3b connects COM1's IRQ 4 through the IOAPIC and intercepts physical interrupts during SVM guests. Passage: docs/phases/06-interrupts-drivers.md, slice 6.3; Z-zephyr-seam.md, What Track Z leaves. Demonstration: the task names its oracle (Zephyr's headers and drivers compiling with -Werror in interrupt mode) and boots on both machines. Size: one task file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX check-in: e105bf0a79 user: x86-1-glint tags: trunk | |