mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-27 11:23:25 +00:00
Implement MADV_FREE in madvise
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
75da7fd30e
commit
7b4c13f5d7
@ -21,11 +21,24 @@ pub fn sys_madvise(start: Vaddr, len: usize, behavior: i32) -> Result<SyscallRet
|
||||
MadviseBehavior::MADV_DONTNEED => {
|
||||
warn!("MADV_DONTNEED isn't implemented, do nothing for now.");
|
||||
}
|
||||
MadviseBehavior::MADV_FREE => madv_free(start, len)?,
|
||||
_ => todo!(),
|
||||
}
|
||||
Ok(SyscallReturn::Return(0))
|
||||
}
|
||||
|
||||
fn madv_free(start: Vaddr, len: usize) -> Result<()> {
|
||||
debug_assert!(start % PAGE_SIZE == 0);
|
||||
debug_assert!(len % PAGE_SIZE == 0);
|
||||
|
||||
let current = current!();
|
||||
let root_vmar = current.root_vmar();
|
||||
let advised_range = start..start + len;
|
||||
let _ = root_vmar.destroy(advised_range);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[repr(i32)]
|
||||
#[derive(Debug, Clone, Copy, TryFromInt)]
|
||||
#[allow(non_camel_case_types)]
|
||||
|
Reference in New Issue
Block a user