From 88508a2cb77def1af35b14ceb1fd98eb0815c5c8 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Sun, 19 Nov 2023 18:01:24 +0100 Subject: [PATCH] Remove as_user_inner. --- src/context/memory.rs | 10 ++++++++-- src/scheme/mod.rs | 5 +---- src/scheme/user.rs | 6 +----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/context/memory.rs b/src/context/memory.rs index 6f0324f3a3..8927f115b8 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -16,7 +16,7 @@ use crate::arch::paging::PAGE_SIZE; use crate::memory::{Enomem, Frame, get_page_info, PageInfo, deallocate_frames, RefKind, AddRefError, RefCount, the_zeroed_frame}; use crate::paging::mapper::{Flusher, InactiveFlusher, PageFlushAll}; use crate::paging::{Page, PageFlags, PageMapper, RmmA, TableKind, VirtualAddress}; -use crate::scheme; +use crate::scheme::{self, KernelSchemes}; use super::context::HardBlockedReason; use super::file::FileDescription; @@ -1728,7 +1728,13 @@ fn correct_inner<'l>(addr_space_lock: &'l Arc>, mut addr_space ref desc => (desc.scheme, desc.number), }; let user_inner = scheme::schemes() - .get(scheme_id).and_then(|s| s.as_user_inner().transpose().ok().flatten()) + .get(scheme_id).and_then(|s| { + if let KernelSchemes::User(user) = s { + user.inner.upgrade() + } else { + None + } + }) .ok_or(PfError::Segv)?; let offset = file_ref.base_offset as u64 + (pages_from_grant_start * PAGE_SIZE) as u64; diff --git a/src/scheme/mod.rs b/src/scheme/mod.rs index 49a3bf3bb6..d893e316d8 100644 --- a/src/scheme/mod.rs +++ b/src/scheme/mod.rs @@ -38,7 +38,7 @@ use self::root::RootScheme; use self::serio::SerioScheme; use self::sys::SysScheme; use self::time::TimeScheme; -use self::user::{UserInner, UserScheme}; +use self::user::UserScheme; /// When compiled with the "acpi" feature - `acpi:` - allows drivers to read a limited set of ACPI tables. #[cfg(all(feature = "acpi", any(target_arch = "x86", target_arch = "x86_64")))] @@ -394,9 +394,6 @@ pub trait KernelScheme: Send + Sync + 'static { fn close(&self, id: usize) -> Result<()> { Err(Error::new(EBADF)) } - - // TODO: This demonstrates why we need to transition away from a dyn trait. - fn as_user_inner(&self) -> Option>> { None } } #[derive(Debug)] diff --git a/src/scheme/user.rs b/src/scheme/user.rs index b2aa97ec48..d7499c9e7c 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -752,7 +752,7 @@ fn page_range_containing(base: usize, size: usize) -> (Page, usize, usize) { /// `UserInner` has to be wrapped #[derive(Clone)] pub struct UserScheme { - inner: Weak + pub(crate) inner: Weak } impl UserScheme { @@ -986,10 +986,6 @@ impl KernelScheme for UserScheme { Response::Fd(_) => Err(Error::new(EIO)), } } - - fn as_user_inner(&self) -> Option>> { - Some(self.inner.upgrade().ok_or(Error::new(ENODEV))) - } } #[derive(PartialEq)]