From 70cd1842c15d00801bb1062cfde9582ddac26a2e Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Wed, 3 Sep 2025 17:07:27 +0200 Subject: [PATCH] kms/device: Don't advertise drm_node on software devices --- src/backend/kms/device.rs | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/backend/kms/device.rs b/src/backend/kms/device.rs index 2fde397c..a1d89bae 100644 --- a/src/backend/kms/device.rs +++ b/src/backend/kms/device.rs @@ -237,7 +237,7 @@ impl State { let gbm = GbmDevice::new(fd) .with_context(|| format!("Failed to initialize GBM device for {}", path.display()))?; - let (render_node, render_formats) = { + let (render_node, render_formats, is_software) = { let egl = init_egl(&gbm)?; let render_node = egl @@ -248,7 +248,7 @@ impl State { .unwrap_or(drm_node); let render_formats = egl.context.dmabuf_texture_formats().clone(); - (render_node, render_formats) + (render_node, render_formats, egl.device.is_software()) }; let token = self @@ -271,8 +271,11 @@ impl State { ) .with_context(|| format!("Failed to add drm device to event loop: {}", dev))?; - let socket = match self.create_socket(dh, render_node, render_formats.clone()) { - Ok(socket) => Some(socket), + let socket = match (!is_software) + .then(|| self.create_socket(dh, render_node, render_formats.clone())) + .transpose() + { + Ok(socket) => socket, Err(err) => { warn!( ?err, @@ -282,6 +285,21 @@ impl State { } }; + let leasing_global = match (!is_software) + .then(|| DrmLeaseState::new::(dh, &drm_node)) + .transpose() + { + Ok(global) => global, + Err(err) => { + // TODO: replace with inspect_err, once stable + warn!( + ?err, + "Failed to initialize drm lease global for: {}", drm_node + ); + None + } + }; + let drm = GbmDrmOutputManager::new( drm, GbmAllocator::new( @@ -311,16 +329,7 @@ impl State { gbm, leased_connectors: Vec::new(), - leasing_global: DrmLeaseState::new::(dh, &drm_node) - .map_err(|err| { - // TODO: replace with inspect_err, once stable - warn!( - ?err, - "Failed to initialize drm lease global for: {}", drm_node - ); - err - }) - .ok(), + leasing_global, active_leases: Vec::new(), active_buffers: HashSet::new(), },