mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-27 03:13:23 +00:00
Remove the VmIO
implementation of VmSpace
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
141fbeaf0c
commit
39aa31a69d
@ -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)]
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user