From ffbfecbdb0843dc3a88a7f081e1dc84ac48eeb7b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 15 Mar 2025 17:30:39 +0100 Subject: [PATCH] graphics/fbcond: Make it robust against initial graphics driver being broken --- graphics/fbcond/src/display.rs | 28 +++++++--------------------- graphics/fbcond/src/scheme.rs | 2 +- graphics/fbcond/src/text.rs | 1 + 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/graphics/fbcond/src/display.rs b/graphics/fbcond/src/display.rs index 45ee86d2ca..60d7a18218 100644 --- a/graphics/fbcond/src/display.rs +++ b/graphics/fbcond/src/display.rs @@ -13,33 +13,19 @@ pub struct DisplayMap { } impl Display { - pub fn open_vt(vt: usize) -> io::Result { - let input_handle = ConsumerHandle::new_vt()?; + pub fn open_new_vt() -> io::Result { + let mut display = Self { + input_handle: ConsumerHandle::new_vt()?, + map: None, + }; - if let Ok(display_handle) = Self::open_display(&input_handle) { - let map = display_handle - .map_display() - .unwrap_or_else(|e| panic!("failed to map display for VT #{vt}: {e}")); + display.reopen_for_handoff(); - Ok(Self { - input_handle, - map: Some(DisplayMap { - display_handle, - inner: map, - }), - }) - } else { - Ok(Self { - input_handle, - map: None, - }) - } + Ok(display) } /// Re-open the display after a handoff. pub fn reopen_for_handoff(&mut self) { - eprintln!("fbcond: Performing handoff"); - let new_display_handle = Self::open_display(&self.input_handle).unwrap(); eprintln!("fbcond: Opened new display"); diff --git a/graphics/fbcond/src/scheme.rs b/graphics/fbcond/src/scheme.rs index b8393c7b23..76c17ff210 100644 --- a/graphics/fbcond/src/scheme.rs +++ b/graphics/fbcond/src/scheme.rs @@ -43,7 +43,7 @@ impl FbconScheme { let mut vts = BTreeMap::new(); for &vt_i in vt_ids { - let display = Display::open_vt(vt_i).expect("Failed to open display for vt"); + let display = Display::open_new_vt().expect("Failed to open display for vt"); event_queue .subscribe( display.input_handle.event_handle().as_raw_fd() as usize, diff --git a/graphics/fbcond/src/text.rs b/graphics/fbcond/src/text.rs index 3499316da2..11d4c7ca19 100644 --- a/graphics/fbcond/src/text.rs +++ b/graphics/fbcond/src/text.rs @@ -23,6 +23,7 @@ impl TextScreen { } pub fn handle_handoff(&mut self) { + eprintln!("fbcond: Performing handoff"); self.display.reopen_for_handoff(); }