Merge branch 'deprecate-stuff' into 'master'
Deprecate the original fmap/funmap See merge request redox-os/kernel!146
This commit is contained in:
@@ -2,7 +2,7 @@ use crate::context;
|
||||
use crate::context::memory::{entry_flags, Grant};
|
||||
use crate::memory::{free_frames, used_frames, PAGE_SIZE};
|
||||
use crate::paging::{ActivePageTable, VirtualAddress};
|
||||
use crate::syscall::data::{Map, Map2, StatVfs};
|
||||
use crate::syscall::data::{Map, OldMap, StatVfs};
|
||||
use crate::syscall::error::*;
|
||||
use crate::syscall::flag::MapFlags;
|
||||
use crate::syscall::scheme::Scheme;
|
||||
@@ -31,7 +31,7 @@ impl Scheme for MemoryScheme {
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
fn fmap2(&self, _id: usize, map: &Map2) -> Result<usize> {
|
||||
fn fmap(&self, _id: usize, map: &Map) -> Result<usize> {
|
||||
//TODO: Abstract with other grant creation
|
||||
if map.size == 0 {
|
||||
Ok(0)
|
||||
@@ -63,12 +63,12 @@ impl Scheme for MemoryScheme {
|
||||
Ok(region.start_address().get())
|
||||
}
|
||||
}
|
||||
fn fmap(&self, id: usize, map: &Map) -> Result<usize> {
|
||||
fn fmap_old(&self, id: usize, map: &OldMap) -> Result<usize> {
|
||||
if map.flags.contains(MapFlags::MAP_FIXED) {
|
||||
// not supported for fmap, which lacks the address argument.
|
||||
return Err(Error::new(EINVAL));
|
||||
}
|
||||
self.fmap2(id, &Map2 {
|
||||
self.fmap(id, &Map {
|
||||
offset: map.offset,
|
||||
size: map.size,
|
||||
flags: map.flags,
|
||||
|
||||
@@ -14,7 +14,7 @@ use crate::paging::{PAGE_SIZE, InactivePageTable, Page, VirtualAddress};
|
||||
use crate::paging::temporary_page::TemporaryPage;
|
||||
use crate::scheme::{AtomicSchemeId, SchemeId};
|
||||
use crate::sync::{WaitQueue, WaitMap};
|
||||
use crate::syscall::data::{Map, Map2, Packet, Stat, StatVfs, TimeSpec};
|
||||
use crate::syscall::data::{Map, OldMap, Packet, Stat, StatVfs, TimeSpec};
|
||||
use crate::syscall::error::*;
|
||||
use crate::syscall::flag::{EventFlags, EVENT_READ, O_NONBLOCK, MapFlags, PROT_READ, PROT_WRITE};
|
||||
use crate::syscall::number::*;
|
||||
@@ -29,7 +29,7 @@ pub struct UserInner {
|
||||
next_id: AtomicU64,
|
||||
context: Weak<RwLock<Context>>,
|
||||
todo: WaitQueue<Packet>,
|
||||
fmap: Mutex<BTreeMap<u64, (Weak<RwLock<Context>>, FileDescriptor, Map2)>>,
|
||||
fmap: Mutex<BTreeMap<u64, (Weak<RwLock<Context>>, FileDescriptor, Map)>>,
|
||||
funmap: Mutex<BTreeMap<Region, VirtualAddress>>,
|
||||
done: WaitMap<u64, usize>,
|
||||
unmounting: AtomicBool,
|
||||
@@ -339,7 +339,7 @@ impl Scheme for UserScheme {
|
||||
inner.call(SYS_FEVENT, file, flags.bits(), 0).map(EventFlags::from_bits_truncate)
|
||||
}
|
||||
|
||||
fn fmap(&self, file: usize, map: &Map) -> Result<usize> {
|
||||
fn fmap_old(&self, file: usize, map: &OldMap) -> Result<usize> {
|
||||
let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
|
||||
|
||||
let (pid, uid, gid, context_lock, desc) = {
|
||||
@@ -369,7 +369,7 @@ impl Scheme for UserScheme {
|
||||
|
||||
let id = inner.next_id.fetch_add(1, Ordering::SeqCst);
|
||||
|
||||
inner.fmap.lock().insert(id, (context_lock, desc, Map2 {
|
||||
inner.fmap.lock().insert(id, (context_lock, desc, Map {
|
||||
offset: map.offset,
|
||||
size: map.size,
|
||||
flags: map.flags,
|
||||
@@ -381,10 +381,10 @@ impl Scheme for UserScheme {
|
||||
pid: pid.into(),
|
||||
uid,
|
||||
gid,
|
||||
a: SYS_FMAP,
|
||||
a: SYS_FMAP_OLD,
|
||||
b: file,
|
||||
c: address,
|
||||
d: mem::size_of::<Map>()
|
||||
d: mem::size_of::<OldMap>()
|
||||
});
|
||||
|
||||
let _ = inner.release(address);
|
||||
@@ -392,7 +392,7 @@ impl Scheme for UserScheme {
|
||||
result
|
||||
}
|
||||
|
||||
fn fmap2(&self, file: usize, map: &Map2) -> Result<usize> {
|
||||
fn fmap(&self, file: usize, map: &Map) -> Result<usize> {
|
||||
let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
|
||||
|
||||
let (pid, uid, gid, context_lock, desc) = {
|
||||
@@ -429,10 +429,10 @@ impl Scheme for UserScheme {
|
||||
pid: pid.into(),
|
||||
uid,
|
||||
gid,
|
||||
a: SYS_FMAP2,
|
||||
a: SYS_FMAP,
|
||||
b: file,
|
||||
c: address,
|
||||
d: mem::size_of::<Map2>()
|
||||
d: mem::size_of::<Map>()
|
||||
});
|
||||
|
||||
let _ = inner.release(address);
|
||||
@@ -440,7 +440,7 @@ impl Scheme for UserScheme {
|
||||
result
|
||||
}
|
||||
|
||||
fn funmap(&self, grant_address: usize) -> Result<usize> {
|
||||
fn funmap_old(&self, grant_address: usize) -> Result<usize> {
|
||||
let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
|
||||
let address_opt = {
|
||||
let mut funmap = inner.funmap.lock();
|
||||
@@ -460,13 +460,13 @@ impl Scheme for UserScheme {
|
||||
}
|
||||
};
|
||||
if let Some(user_address) = address_opt {
|
||||
inner.call(SYS_FUNMAP, user_address, 0, 0)
|
||||
inner.call(SYS_FUNMAP_OLD, user_address, 0, 0)
|
||||
} else {
|
||||
Err(Error::new(EINVAL))
|
||||
}
|
||||
}
|
||||
|
||||
fn funmap2(&self, grant_address: usize, size: usize) -> Result<usize> {
|
||||
fn funmap(&self, grant_address: usize, size: usize) -> Result<usize> {
|
||||
let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
|
||||
let address_opt = {
|
||||
let mut funmap = inner.funmap.lock();
|
||||
@@ -499,7 +499,7 @@ impl Scheme for UserScheme {
|
||||
|
||||
};
|
||||
if let Some(user_address) = address_opt {
|
||||
inner.call(SYS_FUNMAP2, user_address, size, 0)
|
||||
inner.call(SYS_FUNMAP, user_address, size, 0)
|
||||
} else {
|
||||
Err(Error::new(EINVAL))
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use core::{ascii, mem};
|
||||
use alloc::string::String;
|
||||
use alloc::vec::Vec;
|
||||
|
||||
use super::data::{Map, Map2, Stat, TimeSpec};
|
||||
use super::data::{OldMap, Map, Stat, TimeSpec};
|
||||
use super::flag::*;
|
||||
use super::number::*;
|
||||
use super::validate::*;
|
||||
@@ -106,6 +106,14 @@ pub fn format_call(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -
|
||||
c,
|
||||
d
|
||||
),
|
||||
SYS_FMAP_OLD => format!(
|
||||
"fmap_old({}, {:?})",
|
||||
b,
|
||||
validate_slice(
|
||||
c as *const OldMap,
|
||||
d/mem::size_of::<OldMap>()
|
||||
),
|
||||
),
|
||||
SYS_FMAP => format!(
|
||||
"fmap({}, {:?})",
|
||||
b,
|
||||
@@ -114,20 +122,12 @@ pub fn format_call(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -
|
||||
d/mem::size_of::<Map>()
|
||||
),
|
||||
),
|
||||
SYS_FMAP2 => format!(
|
||||
"fmap2({}, {:?})",
|
||||
b,
|
||||
validate_slice(
|
||||
c as *const Map2,
|
||||
d/mem::size_of::<Map2>()
|
||||
),
|
||||
),
|
||||
SYS_FUNMAP => format!(
|
||||
"funmap({:#X})",
|
||||
SYS_FUNMAP_OLD => format!(
|
||||
"funmap_old({:#X})",
|
||||
b
|
||||
),
|
||||
SYS_FUNMAP2 => format!(
|
||||
"funmap2({:#X}, {:#X})",
|
||||
SYS_FUNMAP => format!(
|
||||
"funmap({:#X}, {:#X})",
|
||||
b,
|
||||
c,
|
||||
),
|
||||
|
||||
@@ -444,7 +444,7 @@ pub fn frename(fd: FileHandle, path: &[u8]) -> Result<usize> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn funmap(virtual_address: usize) -> Result<usize> {
|
||||
pub fn funmap_old(virtual_address: usize) -> Result<usize> {
|
||||
if virtual_address == 0 {
|
||||
Ok(0)
|
||||
} else {
|
||||
@@ -475,7 +475,7 @@ pub fn funmap(virtual_address: usize) -> Result<usize> {
|
||||
let scheme = schemes.get(scheme_id).ok_or(Error::new(EBADF))?;
|
||||
scheme.clone()
|
||||
};
|
||||
let res = scheme.funmap(virtual_address);
|
||||
let res = scheme.funmap_old(virtual_address);
|
||||
|
||||
let _ = desc.close();
|
||||
|
||||
@@ -486,7 +486,7 @@ pub fn funmap(virtual_address: usize) -> Result<usize> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn funmap2(virtual_address: usize, length: usize) -> Result<usize> {
|
||||
pub fn funmap(virtual_address: usize, length: usize) -> Result<usize> {
|
||||
if virtual_address == 0 || length == 0 {
|
||||
return Ok(0);
|
||||
} else if virtual_address % PAGE_SIZE != 0 {
|
||||
@@ -541,7 +541,7 @@ pub fn funmap2(virtual_address: usize, length: usize) -> Result<usize> {
|
||||
let scheme = schemes.get(scheme_id).ok_or(Error::new(EBADF))?;
|
||||
scheme.clone()
|
||||
};
|
||||
let res = scheme.funmap2(intersection.start_address().get(), intersection.size());
|
||||
let res = scheme.funmap(intersection.start_address().get(), intersection.size());
|
||||
|
||||
let _ = desc.close();
|
||||
|
||||
|
||||
@@ -66,8 +66,27 @@ pub fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize, bp: u
|
||||
SYS_FCNTL => fcntl(fd, c, d),
|
||||
SYS_FEXEC => fexec(fd, validate_slice(c as *const [usize; 2], d)?, validate_slice(e as *const [usize; 2], f)?),
|
||||
SYS_FRENAME => frename(fd, validate_slice(c as *const u8, d)?),
|
||||
SYS_FUNMAP => funmap(b),
|
||||
SYS_FUNMAP2 => funmap2(b, c),
|
||||
SYS_FUNMAP => funmap(b, c),
|
||||
SYS_FMAP_OLD => {
|
||||
{
|
||||
let contexts = crate::context::contexts();
|
||||
let current = contexts.current().unwrap();
|
||||
let current = current.read();
|
||||
let name = current.name.lock();
|
||||
println!("{:?} using deprecated fmap(...) call", name);
|
||||
}
|
||||
file_op(a, fd, c, d)
|
||||
},
|
||||
SYS_FUNMAP_OLD => {
|
||||
{
|
||||
let contexts = crate::context::contexts();
|
||||
let current = contexts.current().unwrap();
|
||||
let current = current.read();
|
||||
let name = current.name.lock();
|
||||
println!("{:?} using deprecated funmap(...) call", name);
|
||||
}
|
||||
funmap_old(b)
|
||||
},
|
||||
_ => file_op(a, fd, c, d)
|
||||
}
|
||||
}
|
||||
|
||||
2
syscall
2
syscall
Submodule syscall updated: a7d066a3a2...2bc9acc5c2
Reference in New Issue
Block a user