Remove the VmIO implementation of VmSpace

This commit is contained in:
Zhang Junyang
2024-05-26 08:22:14 +00:00
committed by Tate, Hongliang Tian
parent 141fbeaf0c
commit 39aa31a69d
2 changed files with 2 additions and 45 deletions

View File

@ -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)]

View File

@ -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