Remove as_user_inner.
This commit is contained in:
@@ -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<RwLock<AddrSpace>>, 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;
|
||||
|
||||
+1
-4
@@ -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<Result<Arc<UserInner>>> { None }
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
+1
-5
@@ -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<UserInner>
|
||||
pub(crate) inner: Weak<UserInner>
|
||||
}
|
||||
|
||||
impl UserScheme {
|
||||
@@ -986,10 +986,6 @@ impl KernelScheme for UserScheme {
|
||||
Response::Fd(_) => Err(Error::new(EIO)),
|
||||
}
|
||||
}
|
||||
|
||||
fn as_user_inner(&self) -> Option<Result<Arc<UserInner>>> {
|
||||
Some(self.inner.upgrade().ok_or(Error::new(ENODEV)))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
|
||||
Reference in New Issue
Block a user