Remove resource_sceme, Fix syscall crate name, add fmap
This commit is contained in:
parent
db4acfbe8c
commit
e3317f05f7
39 changed files with 130 additions and 221 deletions
|
@ -293,3 +293,27 @@ pub fn fevent(fd: usize, flags: usize) -> Result<usize> {
|
|||
context::event::register(fd, file.scheme, event_id);
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
pub fn funmap(virtual_address: usize) -> Result<usize> {
|
||||
if virtual_address == 0 {
|
||||
Ok(0)
|
||||
} else {
|
||||
let contexts = context::contexts();
|
||||
let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
|
||||
let context = context_lock.read();
|
||||
|
||||
let mut grants = context.grants.lock();
|
||||
|
||||
for i in 0 .. grants.len() {
|
||||
let start = grants[i].start_address().get();
|
||||
let end = start + grants[i].size();
|
||||
if virtual_address >= start && virtual_address < end {
|
||||
grants.remove(i).unmap();
|
||||
|
||||
return Ok(0);
|
||||
}
|
||||
}
|
||||
|
||||
Err(Error::new(EFAULT))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ pub extern fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize
|
|||
SYS_CLOSE => close(b),
|
||||
SYS_DUP => dup(b, validate_slice(c as *const u8, d)?),
|
||||
SYS_FEVENT => fevent(b, c),
|
||||
SYS_FUNMAP => funmap(b),
|
||||
_ => file_op(a, b, c, d)
|
||||
}
|
||||
},
|
||||
|
|
|
@ -367,11 +367,12 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<usize> {
|
|||
context.heap = Some(heap_shared);
|
||||
}
|
||||
|
||||
// Copy grant mapping
|
||||
if ! grants.lock().is_empty() {
|
||||
let frame = active_table.p4()[2].pointed_frame().expect("user heap not mapped");
|
||||
let frame = active_table.p4()[2].pointed_frame().expect("user grants not mapped");
|
||||
let flags = active_table.p4()[2].flags();
|
||||
active_table.with(&mut new_table, &mut temporary_page, |mapper| {
|
||||
mapper.p4_mut()[1].set(frame, flags);
|
||||
mapper.p4_mut()[2].set(frame, flags);
|
||||
});
|
||||
}
|
||||
context.grants = grants;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue