From b31f48cb59fe7c10af7ef55f432b2383e43fdf20 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 6 Mar 2026 22:17:35 +0100 Subject: [PATCH] bootstrap: Directly pass event cap fd to procmgr --- bootstrap/src/exec.rs | 9 +++++++-- bootstrap/src/procmgr.rs | 20 +++----------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/bootstrap/src/exec.rs b/bootstrap/src/exec.rs index 03678ac5bc..4570b51495 100644 --- a/bootstrap/src/exec.rs +++ b/bootstrap/src/exec.rs @@ -148,8 +148,13 @@ pub fn main() -> ! { &this_thr_fd, scheme_creation_cap, kernel_schemes, - |write_fd, scheme_creation_cap, auth, kernel_schemes| { - crate::procmgr::run(write_fd, auth, kernel_schemes, scheme_creation_cap) + |write_fd, scheme_creation_cap, auth, mut kernel_schemes| { + let event = kernel_schemes + .0 + .remove(&GlobalSchemes::Event) + .expect("failed to get event fd"); + drop(kernel_schemes); + crate::procmgr::run(write_fd, auth, event, scheme_creation_cap) }, ); diff --git a/bootstrap/src/procmgr.rs b/bootstrap/src/procmgr.rs index 64b049666c..f478a5874e 100644 --- a/bootstrap/src/procmgr.rs +++ b/bootstrap/src/procmgr.rs @@ -29,7 +29,6 @@ use redox_scheme::{ Socket, Tag, }; use slab::Slab; -use syscall::data::GlobalSchemes; use syscall::schemev2::NewFdFlags; use syscall::{ CallFlags, ContextStatus, ContextVerb, CtxtStsBuf, EACCES, EAGAIN, EBADF, EBADFD, ECANCELED, @@ -39,8 +38,6 @@ use syscall::{ sig_bit, }; -use crate::KernelSchemeMap; - #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] enum VirtualId { KernelId(Id), @@ -48,12 +45,7 @@ enum VirtualId { InternalId(u64), } -pub fn run( - write_fd: FdGuard, - auth: FdGuard, - kernel_schemes: KernelSchemeMap, - scheme_creation_cap: FdGuard, -) -> ! { +pub fn run(write_fd: FdGuard, auth: FdGuard, event: FdGuard, scheme_creation_cap: FdGuard) -> ! { let socket = Socket::create_inner(scheme_creation_cap.as_raw_fd(), true) .expect("failed to open proc scheme socket"); drop(scheme_creation_cap); @@ -61,14 +53,8 @@ pub fn run( // TODO? let socket_ident = socket.inner().raw(); - let queue = RawEventQueue::new( - kernel_schemes - .get(GlobalSchemes::Event) - .expect("failed to get event fd") - .as_raw_fd(), - ) - .expect("failed to create event queue"); - drop(kernel_schemes); + let queue = RawEventQueue::new(event.as_raw_fd()).expect("failed to create event queue"); + drop(event); queue .subscribe(socket.inner().raw(), socket_ident, EventFlags::EVENT_READ)