From 565add84b152dae1be6f6194a24e3190570483d5 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 1 Jul 2025 18:31:52 +0200 Subject: [PATCH 1/3] graphics/driver-graphics: Update to redox-scheme 0.6 --- Cargo.lock | 17 ++++++++++++--- Cargo.toml | 1 - graphics/driver-graphics/Cargo.toml | 2 +- graphics/driver-graphics/src/lib.rs | 34 ++++++++++++++++++++--------- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a3fd0ece1a..ce7c05e14d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -404,7 +404,7 @@ dependencies = [ "inputd", "libredox", "log", - "redox-scheme 0.4.0", + "redox-scheme 0.6.2", "redox_syscall", ] @@ -1153,6 +1153,16 @@ dependencies = [ "redox_syscall", ] +[[package]] +name = "redox-scheme" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c00025a04f76fdcf72c15f10c7a12d9f2fdde93e539be9a57d5d632c4158a9e" +dependencies = [ + "libredox", + "redox_syscall", +] + [[package]] name = "redox_event" version = "0.4.1" @@ -1165,8 +1175,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.11" -source = "git+https://gitlab.redox-os.org/redox-os/syscall.git?branch=master#8f646a63ac9c3aa532a37ddfdc136ec19878f0d6" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ "bitflags 2.9.0", ] diff --git a/Cargo.toml b/Cargo.toml index de99b5ded3..4fb623614e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,4 +56,3 @@ lto = "fat" mio = { git = "https://gitlab.redox-os.org/redox-os/mio.git", branch = "redox-unix" } orbclient = { git = "https://gitlab.redox-os.org/redox-os/orbclient.git", version = "0.3.44" } redox-daemon = { git = "https://gitlab.redox-os.org/redox-os/redox-daemon.git" } -redox_syscall = { git = "https://gitlab.redox-os.org/redox-os/syscall.git", branch = "master" } diff --git a/graphics/driver-graphics/Cargo.toml b/graphics/driver-graphics/Cargo.toml index a1525e23f2..ef5078e59e 100644 --- a/graphics/driver-graphics/Cargo.toml +++ b/graphics/driver-graphics/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] log = "0.4" -redox-scheme = "0.4" +redox-scheme = "0.6.2" redox_syscall = "0.5" libredox = "0.1.3" diff --git a/graphics/driver-graphics/src/lib.rs b/graphics/driver-graphics/src/lib.rs index a466c19139..6fb09e91b8 100644 --- a/graphics/driver-graphics/src/lib.rs +++ b/graphics/driver-graphics/src/lib.rs @@ -5,7 +5,9 @@ use std::sync::Arc; use graphics_ipc::v1::{CursorDamage, Damage}; use inputd::{VtEvent, VtEventKind}; use libredox::Fd; -use redox_scheme::{RequestKind, Scheme, SignalBehavior, Socket}; +use redox_scheme::scheme::SchemeSync; +use redox_scheme::{CallerCtx, OpenResult, RequestKind, SignalBehavior, Socket}; +use syscall::schemev2::NewFdFlags; use syscall::{Error, MapFlags, Result, EAGAIN, EBADF, EINVAL}; pub trait GraphicsAdapter { @@ -136,7 +138,7 @@ impl GraphicsScheme { match request.kind() { RequestKind::Call(call) => { - let response = call.handle_scheme(self); + let response = call.handle_sync(self); self.socket .write_response(response, SignalBehavior::Restart) .expect("driver-graphics: failed to write response"); @@ -192,8 +194,8 @@ impl GraphicsScheme { } } -impl Scheme for GraphicsScheme { - fn open(&mut self, path: &str, _flags: usize, _uid: u32, _gid: u32) -> Result { +impl SchemeSync for GraphicsScheme { + fn open(&mut self, path: &str, _flags: usize, _ctx: &CallerCtx) -> Result { if path.is_empty() { return Err(Error::new(EINVAL)); } @@ -214,10 +216,13 @@ impl Scheme for GraphicsScheme { self.next_id += 1; self.handles .insert(self.next_id, Handle::V1Screen { vt, screen: id }); - Ok(self.next_id) + Ok(OpenResult::ThisScheme { + number: self.next_id, + flags: NewFdFlags::empty(), + }) } - fn fpath(&mut self, id: usize, buf: &mut [u8]) -> syscall::Result { + fn fpath(&mut self, id: usize, buf: &mut [u8], _ctx: &CallerCtx) -> syscall::Result { let path = match self.handles.get(&id).ok_or(Error::new(EBADF))? { Handle::V1Screen { vt, screen } => { let framebuffer = &self.vts[vt].display_fbs[*screen]; @@ -233,20 +238,20 @@ impl Scheme for GraphicsScheme { Ok(path.len()) } - fn fsync(&mut self, id: usize) -> syscall::Result { + fn fsync(&mut self, id: usize, _ctx: &CallerCtx) -> syscall::Result<()> { match self.handles.get(&id).ok_or(Error::new(EBADF))? { Handle::V1Screen { vt, screen } => { if *vt != self.active_vt { // This is a protection against background VT's spamming us with flush requests. We will // flush the framebuffer on the next VT switch anyway - return Ok(0); + return Ok(()); } Self::update_whole_screen( &mut self.adapter, *screen, &self.vts[vt].display_fbs[*screen], ); - Ok(0) + Ok(()) } } } @@ -257,6 +262,7 @@ impl Scheme for GraphicsScheme { buf: &mut [u8], _offset: u64, _fcntl_flags: u32, + _ctx: &CallerCtx, ) -> Result { match self.handles.get(&id).ok_or(Error::new(EBADF))? { Handle::V1Screen { .. } => { @@ -273,7 +279,14 @@ impl Scheme for GraphicsScheme { } } - fn write(&mut self, id: usize, buf: &[u8], _offset: u64, _fcntl_flags: u32) -> Result { + fn write( + &mut self, + id: usize, + buf: &[u8], + _offset: u64, + _fcntl_flags: u32, + _ctx: &CallerCtx, + ) -> Result { match self.handles.get(&id).ok_or(Error::new(EBADF))? { Handle::V1Screen { vt, screen } => { if *vt != self.active_vt { @@ -350,6 +363,7 @@ impl Scheme for GraphicsScheme { _offset: u64, _size: usize, _flags: MapFlags, + _ctx: &CallerCtx, ) -> syscall::Result { // log::trace!("KSMSG MMAP {} {:?} {} {}", id, _flags, _offset, _size); let framebuffer = match self.handles.get(&id).ok_or(Error::new(EINVAL))? { From 2f756fd29dceb899a2f7092a8d905974936e8df2 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 1 Jul 2025 21:44:06 +0200 Subject: [PATCH 2/3] virtio-core: Fix a warning --- virtio-core/src/transport.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtio-core/src/transport.rs b/virtio-core/src/transport.rs index b34f1b50e4..b2782bdc5c 100644 --- a/virtio-core/src/transport.rs +++ b/virtio-core/src/transport.rs @@ -59,7 +59,7 @@ pub fn spawn_irq_thread(irq_handle: &File, queue: &Arc>) { let queue_copy = queue.clone(); std::thread::spawn(move || { - let mut event_queue = RawEventQueue::new().unwrap(); + let event_queue = RawEventQueue::new().unwrap(); event_queue .subscribe(irq_fd as usize, 0, event::EventFlags::READ) From 8ac07539b076dddb2f9c8d8c37ec96ad8bbe0431 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 1 Jul 2025 21:46:20 +0200 Subject: [PATCH 3/3] graphics/driver-graphics: Handle mmap offset --- graphics/driver-graphics/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/graphics/driver-graphics/src/lib.rs b/graphics/driver-graphics/src/lib.rs index 6fb09e91b8..94860f3103 100644 --- a/graphics/driver-graphics/src/lib.rs +++ b/graphics/driver-graphics/src/lib.rs @@ -360,17 +360,17 @@ impl SchemeSync for GraphicsScheme { fn mmap_prep( &mut self, id: usize, - _offset: u64, + offset: u64, _size: usize, _flags: MapFlags, _ctx: &CallerCtx, ) -> syscall::Result { // log::trace!("KSMSG MMAP {} {:?} {} {}", id, _flags, _offset, _size); - let framebuffer = match self.handles.get(&id).ok_or(Error::new(EINVAL))? { - Handle::V1Screen { vt, screen } => &self.vts[vt].display_fbs[*screen], + let (framebuffer, offset) = match self.handles.get(&id).ok_or(Error::new(EINVAL))? { + Handle::V1Screen { vt, screen } => (&self.vts[vt].display_fbs[*screen], offset), }; let ptr = T::map_dumb_framebuffer(&mut self.adapter, framebuffer); - Ok(ptr as usize) + Ok(unsafe { ptr.add(offset as usize) } as usize) } }