Skip to content

console: share the Uart by reference and add iprint - #5

Closed
gmacd wants to merge 7 commits into
mainfrom
console-iprint
Closed

console: share the Uart by reference and add iprint#5
gmacd wants to merge 7 commits into
mainfrom
console-iprint

Conversation

@gmacd

@gmacd gmacd commented Jul 24, 2026

Copy link
Copy Markdown
Owner

The console Uart is now &'static dyn Uart rather than &mutputb only needs a shared reference, and sharing lets the same Uart be aliased by the new direct-print path.

Adds iprint/iprintln in the tradition of Plan 9's iprint: masks IRQs, takes only a best-effort bounded-spin interlock, and writes polled bytes straight to the hardware, bypassing the console lock. This is the print for interrupt context, panic, and console/lock debugging. The console lock becomes thread-context-only (debug-asserted), so println no longer masks IRQs around UART output. The aarch64 panic and trap handlers switch to iprintln.

Stacked on #4; review the last commit.

gmacd added 7 commits July 8, 2026 10:39
Signed-off-by: Graham MacDonald <grahamamacdonald@gmail.com>
Signed-off-by: Graham MacDonald <grahamamacdonald@gmail.com>
Signed-off-by: Graham MacDonald <grahamamacdonald@gmail.com>
req_buffer_va/req_buffer_pa held VirtRange/PhysRange values; name
them req_buf_virtrange/req_buf_physrange like the rest of the file.
Also drop an unused pub on mbox_virtrange.
Add port::irq with an RAII IrqGuard (mask IRQs on new, restore the
previous state on drop; nestable; no-op until an arch registers its
mask/restore hooks) and an interrupt-depth counter (enter_interrupt/
exit_interrupt/in_interrupt) so subsystems can either mask around
locks shared with interrupt context or assert they are never used
from it.

aarch64 registers a DAIF-based implementation at early boot and
brackets the trap handler with the depth counter.  Other arches are
unaffected: the guard is a no-op and in_interrupt is always false
until they opt in.
The console Uart is now held as &'static dyn Uart rather than &mut:
putb only needs a shared reference, and a shared reference lets the
same Uart be aliased by the new direct-print path.

Add iprint/iprintln in the tradition of Plan 9's iprint: mask IRQs,
take only a best-effort bounded-spin interlock, and write polled
bytes straight to the hardware, bypassing the console lock.  This is
the print for interrupt context, panic, and console/lock debugging;
each arch registers a direct byte writer at console init.

The console lock itself becomes thread-context-only, enforced with a
debug assertion, so println no longer needs to mask IRQs around UART
output.  The aarch64 panic handler and trap handler switch to
iprintln accordingly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant