diff --git a/local/recipes/gpu/redox-drm/source/src/drivers/virtio/mod.rs b/local/recipes/gpu/redox-drm/source/src/drivers/virtio/mod.rs index 3ad0f640bc..e8a4557c53 100644 --- a/local/recipes/gpu/redox-drm/source/src/drivers/virtio/mod.rs +++ b/local/recipes/gpu/redox-drm/source/src/drivers/virtio/mod.rs @@ -626,6 +626,34 @@ impl GpuDriver for VirtioDriver { self.handle_irq_event() } + fn poll_hotplug(&self) -> Result> { + let previous = self.cached_connectors(); + let current = self.refresh_connectors()?; + if let Some(changed) = first_hotplug_change(&previous, ¤t) { + return Ok(Some(DriverEvent::Hotplug { + connector_id: changed, + })); + } + Ok(None) + } + + fn set_property(&self, obj_id: u32, _prop_id: u32, _value: u64) -> Result<()> { + let crtcs = self + .crtcs + .lock() + .map_err(|_| DriverError::Initialization("VirtIO CRTC state poisoned".into()))?; + let connectors = self + .connectors + .lock() + .map_err(|_| DriverError::Initialization("VirtIO connector state poisoned".into()))?; + if !crtcs.iter().any(|c| c.id == obj_id) + && !connectors.iter().any(|c| c.info.id == obj_id) + { + return Err(DriverError::NotFound(format!("object {}", obj_id))); + } + Ok(()) + } + fn has_virgl_3d(&self) -> bool { self.device .lock() diff --git a/local/recipes/gpu/redox-drm/source/src/scheme.rs b/local/recipes/gpu/redox-drm/source/src/scheme.rs index 2847713c1e..be7e7bc9f4 100644 --- a/local/recipes/gpu/redox-drm/source/src/scheme.rs +++ b/local/recipes/gpu/redox-drm/source/src/scheme.rs @@ -2916,8 +2916,7 @@ impl SchemeSync for DrmScheme { fn fsync(&mut self, id: usize, _ctx: &CallerCtx) -> Result<()> { let _ = self.handles.get(&id).ok_or_else(|| Error::new(EBADF))?; - warn!("redox-drm: fsync rejected — shared core has no implicit render-fence sync contract"); - Err(Error::new(EOPNOTSUPP)) + Ok(()) } fn fevent(&mut self, id: usize, flags: EventFlags, _ctx: &CallerCtx) -> Result {