kms: Try to re-open the device on permission errors after resume
This commit is contained in:
parent
23b198f30b
commit
61e677e39f
3 changed files with 453 additions and 158 deletions
|
|
@ -18,7 +18,7 @@ use smithay::{
|
|||
use std::sync::Arc;
|
||||
use tracing::{info, warn};
|
||||
|
||||
use crate::state::{ClientState, State, advertised_node_for_client};
|
||||
use crate::state::{ClientState, Common, State, advertised_node_for_client};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Socket {
|
||||
|
|
@ -27,7 +27,7 @@ pub struct Socket {
|
|||
pub dmabuf_global: DmabufGlobal,
|
||||
}
|
||||
|
||||
impl State {
|
||||
impl Common {
|
||||
pub(super) fn create_socket(
|
||||
&mut self,
|
||||
dh: &DisplayHandle,
|
||||
|
|
@ -36,7 +36,7 @@ impl State {
|
|||
) -> Result<Socket> {
|
||||
let socket_name = format!(
|
||||
"{}-{}",
|
||||
&self.common.socket.to_string_lossy(),
|
||||
&self.socket.to_string_lossy(),
|
||||
render_node
|
||||
.dev_path()
|
||||
.unwrap()
|
||||
|
|
@ -53,33 +53,28 @@ impl State {
|
|||
.with_context(|| "Failed to create drm format shared memory table")?;
|
||||
|
||||
let dmabuf_global = self
|
||||
.common
|
||||
.dmabuf_state
|
||||
.create_global_with_filter_and_default_feedback::<State, _>(dh, &feedback, filter);
|
||||
|
||||
let drm_global_id = self
|
||||
.common
|
||||
.wl_drm_state
|
||||
.create_global_with_filter::<State, _>(
|
||||
dh,
|
||||
render_node
|
||||
.dev_path_with_type(NodeType::Render)
|
||||
.or_else(|| render_node.dev_path())
|
||||
.ok_or(anyhow!(
|
||||
"Could not determine path for gpu node: {}",
|
||||
render_node
|
||||
))?,
|
||||
formats,
|
||||
&dmabuf_global,
|
||||
filter,
|
||||
);
|
||||
let drm_global_id = self.wl_drm_state.create_global_with_filter::<State, _>(
|
||||
dh,
|
||||
render_node
|
||||
.dev_path_with_type(NodeType::Render)
|
||||
.or_else(|| render_node.dev_path())
|
||||
.ok_or(anyhow!(
|
||||
"Could not determine path for gpu node: {}",
|
||||
render_node
|
||||
))?,
|
||||
formats,
|
||||
&dmabuf_global,
|
||||
filter,
|
||||
);
|
||||
|
||||
// add a special socket for the gpu
|
||||
let listener = ListeningSocketSource::with_name(&socket_name)
|
||||
.with_context(|| format!("Failed to bind socket to {}", socket_name))?;
|
||||
let socket_name_clone = socket_name.clone();
|
||||
let token = self
|
||||
.common
|
||||
.event_loop_handle
|
||||
.insert_source(listener, move |client_stream, _, state: &mut State| {
|
||||
if let Err(err) = state.common.display_handle.insert_client(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue