From 243663927189c409748aaa32badd72b15d8b171d Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sat, 9 May 2026 12:07:58 +0200 Subject: [PATCH] drivers/graphics: Avoid duplicate get_connector calls --- drivers/graphics/console-draw/src/lib.rs | 15 ++++++++++----- drivers/graphics/fbbootlogd/src/scheme.rs | 3 +-- drivers/graphics/fbcond/src/display.rs | 3 +-- drivers/graphics/graphics-ipc/src/lib.rs | 7 ++++--- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/graphics/console-draw/src/lib.rs b/drivers/graphics/console-draw/src/lib.rs index 07a04ad8e9..37721d7ac1 100644 --- a/drivers/graphics/console-draw/src/lib.rs +++ b/drivers/graphics/console-draw/src/lib.rs @@ -1,7 +1,7 @@ extern crate ransid; use std::collections::VecDeque; -use std::convert::{TryFrom, TryInto}; +use std::convert::TryFrom; use std::{cmp, io, mem, ptr}; use drm::buffer::{Buffer, DrmFourcc}; @@ -59,8 +59,7 @@ pub struct V2DisplayMap { impl V2DisplayMap { pub fn new(display_handle: V2GraphicsHandle) -> io::Result { - let connector = display_handle.first_display().unwrap(); - let connector_info = display_handle.get_connector(connector, true).unwrap(); + let connector_info = display_handle.first_display().unwrap(); let mode = connector_info.modes()[0]; let (width, height) = mode.size(); @@ -81,11 +80,17 @@ impl V2DisplayMap { )?; let fb = display_handle.add_framebuffer(buffer.buffer(), 32, 32)?; - display_handle.set_crtc(crtc, Some(fb), (0, 0), &[connector], Some(mode))?; + display_handle.set_crtc( + crtc, + Some(fb), + (0, 0), + &[connector_info.handle()], + Some(mode), + )?; Ok(Self { display_handle, - connector, + connector: connector_info.handle(), crtc, fb, buffer, diff --git a/drivers/graphics/fbbootlogd/src/scheme.rs b/drivers/graphics/fbbootlogd/src/scheme.rs index 812c4a5bc3..13c98800fe 100644 --- a/drivers/graphics/fbbootlogd/src/scheme.rs +++ b/drivers/graphics/fbbootlogd/src/scheme.rs @@ -3,7 +3,6 @@ use std::collections::VecDeque; use console_draw::{Damage, TextScreen, V2DisplayMap}; use drm::buffer::Buffer; -use drm::control::Device; use graphics_ipc::V2GraphicsHandle; use inputd::ConsumerHandle; use orbclient::{Event, EventOption}; @@ -147,7 +146,7 @@ impl FbbootlogScheme { let mode = match map .display_handle .first_display() - .and_then(|handle| Ok(map.display_handle.get_connector(handle, true)?.modes()[0])) + .map(|info| info.modes()[0]) { Ok(mode) => mode, Err(err) => { diff --git a/drivers/graphics/fbcond/src/display.rs b/drivers/graphics/fbcond/src/display.rs index eb09b97e9c..e702cee5c3 100644 --- a/drivers/graphics/fbcond/src/display.rs +++ b/drivers/graphics/fbcond/src/display.rs @@ -1,6 +1,5 @@ use console_draw::{Damage, TextScreen, V2DisplayMap}; use drm::buffer::Buffer; -use drm::control::Device; use graphics_ipc::V2GraphicsHandle; use inputd::ConsumerHandle; use std::io; @@ -55,7 +54,7 @@ impl Display { let mode = match map .display_handle .first_display() - .and_then(|handle| Ok(map.display_handle.get_connector(handle, true)?.modes()[0])) + .map(|info| info.modes()[0]) { Ok(mode) => mode, Err(err) => { diff --git a/drivers/graphics/graphics-ipc/src/lib.rs b/drivers/graphics/graphics-ipc/src/lib.rs index 285b304372..46e1bcdcc0 100644 --- a/drivers/graphics/graphics-ipc/src/lib.rs +++ b/drivers/graphics/graphics-ipc/src/lib.rs @@ -33,10 +33,11 @@ impl V2GraphicsHandle { Ok(handle) } - pub fn first_display(&self) -> io::Result { + pub fn first_display(&self) -> io::Result { for &connector in self.resource_handles().unwrap().connectors() { - if self.get_connector(connector, true)?.state() == State::Connected { - return Ok(connector); + let info = self.get_connector(connector, true)?; + if info.state() == State::Connected { + return Ok(info); } } Err(io::Error::other("no connected display"))