diff --git a/framework/aster-frame/src/vm/space.rs b/framework/aster-frame/src/vm/space.rs index 381f10e9f..d6e0828b0 100644 --- a/framework/aster-frame/src/vm/space.rs +++ b/framework/aster-frame/src/vm/space.rs @@ -2,13 +2,11 @@ use core::ops::Range; -use align_ext::AlignExt; - use super::{ is_page_aligned, kspace::KERNEL_PAGE_TABLE, page_table::{PageTable, PageTableMode, UserMode}, - CachePolicy, PageFlags, PageProperty, PagingConstsTrait, PrivilegedPageFlags, VmFrameVec, VmIo, + CachePolicy, PageFlags, PageProperty, PagingConstsTrait, PrivilegedPageFlags, VmFrameVec, PAGE_SIZE, }; use crate::{ @@ -216,42 +214,6 @@ impl Default for VmSpace { } } -impl VmIo for VmSpace { - fn read_bytes(&self, vaddr: usize, buf: &mut [u8]) -> Result<()> { - let range_end = vaddr.checked_add(buf.len()).ok_or(Error::Overflow)?; - let vaddr = vaddr.align_down(PAGE_SIZE); - let range_end = range_end.align_up(PAGE_SIZE); - for qr in self.query_range(&(vaddr..range_end))? { - if matches!(qr, VmQueryResult::NotMapped { .. }) { - return Err(Error::AccessDenied); - } - } - self.activate(); - buf.clone_from_slice(unsafe { core::slice::from_raw_parts(vaddr as *const u8, buf.len()) }); - Ok(()) - } - - fn write_bytes(&self, vaddr: usize, buf: &[u8]) -> Result<()> { - let range_end = vaddr.checked_add(buf.len()).ok_or(Error::Overflow)?; - let vaddr = vaddr.align_down(PAGE_SIZE); - let range_end = range_end.align_up(PAGE_SIZE); - for qr in self.query_range(&(vaddr..vaddr + range_end))? { - match qr { - VmQueryResult::NotMapped { .. } => return Err(Error::AccessDenied), - VmQueryResult::Mapped { prop, .. } => { - if !prop.flags.contains(PageFlags::W) { - return Err(Error::AccessDenied); - } - } - } - } - self.activate(); - unsafe { core::slice::from_raw_parts_mut(vaddr as *mut u8, buf.len()) } - .clone_from_slice(buf); - Ok(()) - } -} - /// Options for mapping physical memory pages into a VM address space. /// See `VmSpace::map`. #[derive(Clone, Debug)] diff --git a/kernel/aster-nix/src/thread/exception.rs b/kernel/aster-nix/src/thread/exception.rs index f04961dd8..1ed7d53fc 100644 --- a/kernel/aster-nix/src/thread/exception.rs +++ b/kernel/aster-nix/src/thread/exception.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 -use aster_frame::{cpu::*, vm::VmIo}; +use aster_frame::cpu::*; use crate::{ prelude::*, process::signal::signals::fault::FaultSignal, @@ -45,11 +45,6 @@ fn handle_page_fault(trap_info: &CpuExceptionInfo) { page_fault_addr, e ); generate_fault_signal(trap_info); - } else { - // ensure page fault is successfully handled - // FIXME: this check can be removed - let vm_space = root_vmar.vm_space(); - let _: u8 = vm_space.read_val(page_fault_addr).unwrap(); } } else { // Otherwise, the page fault cannot be handled