From 65c23ed77d65f5a63a6f61217d0742e2311fba31 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 6 Apr 2025 17:12:10 +0200 Subject: [PATCH] graphics/vesad: Disable kernel graphical debug as late as possible --- graphics/vesad/src/main.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/graphics/vesad/src/main.rs b/graphics/vesad/src/main.rs index dee3318404..e107129af0 100644 --- a/graphics/vesad/src/main.rs +++ b/graphics/vesad/src/main.rs @@ -3,9 +3,10 @@ extern crate syscall; use driver_graphics::GraphicsScheme; use event::{user_data, EventQueue}; -use inputd::DisplayHandle; +use inputd::{DisplayHandle, VtEventKind}; use std::env; use std::fs::File; +use std::io::Write; use std::os::fd::AsRawFd; use crate::framebuffer::FrameBuffer; @@ -104,7 +105,10 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec) -> ! { ) .unwrap(); - let _ = File::open("/scheme/debug/disable-graphical-debug"); + let mut disable_graphical_debug = Some( + File::open("/scheme/debug/disable-graphical-debug") + .expect("vesad: Failed to open /scheme/debug/disable-graphical-debug"), + ); libredox::call::setrens(0, 0).expect("vesad: failed to enter null namespace"); @@ -121,6 +125,16 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec) -> ! { .read_vt_event() .expect("vesad: failed to read display handle") { + if let VtEventKind::Activate = vt_event.kind { + // Disable the kernel graphical debug writing once switching vt's for the + // first time. This way the kernel graphical debug remains enabled if the + // userspace logging infrastructure doesn't start up because for example a + // kernel panic happened prior to it starting up or logd crashed. + if let Some(mut disable_graphical_debug) = disable_graphical_debug.take() { + let _ = disable_graphical_debug.write(&[1]); + } + } + scheme.handle_vt_event(vt_event); } }