summaryrefslogtreecommitdiffstats
path: root/rsnix/src/klog.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rsnix/src/klog.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/rsnix/src/klog.rs b/rsnix/src/klog.rs
index 0c7dc06..5da5094 100644
--- a/rsnix/src/klog.rs
+++ b/rsnix/src/klog.rs
@@ -79,16 +79,19 @@ pub fn append(line: &str, mut ms: u64) {
79 r.seq += 1; 79 r.seq += 1;
80} 80}
81 81
82/// Append the formatted output of a `serial_println!` — the macro hook. 82/// Format one serial line, write it to the serial port, and append it
83/// `fmt::Write` may deliver the line in several chunks, so accumulate 83/// to the ring — all under the scheduler lock, so a line from one task
84/// into one line buffer first, then append the whole line. The 84/// never interleaves with another task's line (line atomicity).
85/// timestamp is taken when the line is emitted (monotonic ms since 85/// `serial_println!` funnels through here.
86/// boot, from the PIT tick + live-counter interpolation). 86pub fn emit(args: core::fmt::Arguments<'_>) {
87pub fn append_fmt(args: core::fmt::Arguments<'_>) {
88 let ms = crate::interrupts::uptime_ms();
89 let mut line = LineBuf::new(); 87 let mut line = LineBuf::new();
90 let _ = core::fmt::write(&mut line, args); 88 let _ = core::fmt::write(&mut line, args);
89 let ms = crate::interrupts::uptime_ms();
90 crate::sched::lock();
91 crate::serial::write_raw(line.as_str());
92 crate::serial::write_raw("\r\n");
91 append(line.as_str(), ms); 93 append(line.as_str(), ms);
94 crate::sched::unlock();
92} 95}
93 96
94struct LineBuf { 97struct LineBuf {