Skip to content

Commit 739da9f

Browse files
author
whitequark
committedDec 19, 2016
runtime: print trace level log messages to UART during startup.
There's no way to retrieve them otherwise if the startup kernel hangs. This commit was mistakenly removed in 88ad054.
1 parent b9588dd commit 739da9f

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed
 

Diff for: ‎artiq/firmware/runtime/logger.rs

+17-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use core::{mem, ptr};
2-
use core::cell::RefCell;
2+
use core::cell::{Cell, RefCell};
33
use log::{self, Log, LogLevel, LogMetadata, LogRecord, LogLevelFilter};
44
use log_buffer::LogBuffer;
55
use clock;
66

77
pub struct BufferLogger {
8-
buffer: RefCell<LogBuffer<&'static mut [u8]>>
8+
buffer: RefCell<LogBuffer<&'static mut [u8]>>,
9+
trace_to_uart: Cell<bool>
910
}
1011

1112
unsafe impl Sync for BufferLogger {}
@@ -15,7 +16,8 @@ static mut LOGGER: *const BufferLogger = ptr::null();
1516
impl BufferLogger {
1617
pub fn new(buffer: &'static mut [u8]) -> BufferLogger {
1718
BufferLogger {
18-
buffer: RefCell::new(LogBuffer::new(buffer))
19+
buffer: RefCell::new(LogBuffer::new(buffer)),
20+
trace_to_uart: Cell::new(true)
1921
}
2022
}
2123

@@ -48,6 +50,14 @@ impl BufferLogger {
4850
pub fn extract<R, F: FnOnce(&str) -> R>(&self, f: F) -> R {
4951
f(self.buffer.borrow_mut().extract())
5052
}
53+
54+
pub fn disable_trace_to_uart(&self) {
55+
if self.trace_to_uart.get() {
56+
trace!("disabling tracing to UART; all further trace messages \
57+
are sent to core log only");
58+
self.trace_to_uart.set(false)
59+
}
60+
}
5161
}
5262

5363
impl Log for BufferLogger {
@@ -61,7 +71,10 @@ impl Log for BufferLogger {
6171
writeln!(self.buffer.borrow_mut(),
6272
"[{:12}us] {:>5}({}): {}",
6373
clock::get_us(), record.level(), record.target(), record.args()).unwrap();
64-
if record.level() <= LogLevel::Info {
74+
75+
// Printing to UART is really slow, so avoid doing that when we have an alternative
76+
// route to retrieve the debug messages.
77+
if self.trace_to_uart.get() || record.level() <= LogLevel::Info {
6578
println!("[{:12}us] {:>5}({}): {}",
6679
clock::get_us(), record.level(), record.target(), record.args());
6780
}

Diff for: ‎artiq/firmware/runtime/session.rs

+2
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,8 @@ pub fn thread(waiter: Waiter, spawner: Spawner) {
590590
}
591591
}
592592

593+
BufferLogger::with_instance(|logger| logger.disable_trace_to_uart());
594+
593595
let addr = SocketAddr::new(IP_ANY, 1381);
594596
let listener = TcpListener::bind(waiter, addr).expect("cannot bind socket");
595597
listener.set_keepalive(true);

0 commit comments

Comments
 (0)
Please sign in to comment.