Merge branch 'deprecate-stuff' into 'master'

Deprecate the original fmap/funmap

See merge request redox-os/kernel!146
This commit is contained in:
Jeremy Soller
2020-08-14 15:20:36 +00:00
6 changed files with 56 additions and 37 deletions

View File

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

View File

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

View File

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

View File

@@ -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();

View File

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

Submodule syscall updated: a7d066a3a2...2bc9acc5c2