From f0976e1d6020e6854ca30ed1f6d61b10dfc4fa58 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Fri, 21 Jul 2023 11:08:59 +0200 Subject: [PATCH] Add MunmapFlags. --- src/flag.rs | 9 +++++++++ src/scheme/scheme.rs | 4 ++-- src/scheme/scheme_block.rs | 4 ++-- src/scheme/scheme_block_mut.rs | 4 ++-- src/scheme/scheme_mut.rs | 8 ++++---- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/flag.rs b/src/flag.rs index ef17c1703f..45a6e42e80 100644 --- a/src/flag.rs +++ b/src/flag.rs @@ -90,6 +90,15 @@ bitflags! { const MAP_LAZY = 0x0010; } } +bitflags! { + pub struct MunmapFlags: usize { + /// Indicates whether the funmap call must implicitly do an msync, for the changes to + /// become visible later. + /// + /// This flag will currently be set if and only if MAP_SHARED | PROT_WRITE are set. + const NEEDS_SYNC = 1; + } +} pub const MODE_TYPE: u16 = 0xF000; pub const MODE_DIR: u16 = 0x4000; diff --git a/src/scheme/scheme.rs b/src/scheme/scheme.rs index 735cc0fb3d..ee09d697bf 100644 --- a/src/scheme/scheme.rs +++ b/src/scheme/scheme.rs @@ -62,7 +62,7 @@ pub trait Scheme { SYS_CLOSE => self.close(packet.b), KSMSG_MMAP_PREP => self.mmap_prep(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MapFlags::from_bits_truncate(packet.d)), - KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c), + KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MunmapFlags::from_bits_truncate(packet.d)), _ => Err(Error::new(ENOSYS)) }; @@ -188,7 +188,7 @@ pub trait Scheme { } #[allow(unused_variables)] - fn munmap(&self, id: usize, offset: u64, size: usize) -> Result { + fn munmap(&self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result { Err(Error::new(EOPNOTSUPP)) } } diff --git a/src/scheme/scheme_block.rs b/src/scheme/scheme_block.rs index 3ac6cf3414..e74e3b7e2a 100644 --- a/src/scheme/scheme_block.rs +++ b/src/scheme/scheme_block.rs @@ -62,7 +62,7 @@ pub trait SchemeBlock { SYS_CLOSE => self.close(packet.b), KSMSG_MMAP_PREP => self.mmap_prep(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MapFlags::from_bits_truncate(packet.d)), - KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c), + KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MunmapFlags::from_bits_truncate(packet.d)), _ => Err(Error::new(ENOSYS)) }; @@ -188,7 +188,7 @@ pub trait SchemeBlock { } #[allow(unused_variables)] - fn munmap(&self, id: usize, offset: u64, size: usize) -> Result> { + fn munmap(&self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result> { Err(Error::new(EOPNOTSUPP)) } } diff --git a/src/scheme/scheme_block_mut.rs b/src/scheme/scheme_block_mut.rs index 1f65df0451..fd2c59069b 100644 --- a/src/scheme/scheme_block_mut.rs +++ b/src/scheme/scheme_block_mut.rs @@ -62,7 +62,7 @@ pub trait SchemeBlockMut { SYS_CLOSE => self.close(packet.b), KSMSG_MMAP_PREP => self.mmap_prep(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MapFlags::from_bits_truncate(packet.d)), - KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c), + KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MunmapFlags::from_bits_truncate(packet.d)), _ => Err(Error::new(ENOSYS)) }; @@ -188,7 +188,7 @@ pub trait SchemeBlockMut { } #[allow(unused_variables)] - fn munmap(&mut self, id: usize, offset: u64, size: usize) -> Result> { + fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result> { Err(Error::new(EOPNOTSUPP)) } } diff --git a/src/scheme/scheme_mut.rs b/src/scheme/scheme_mut.rs index 0b166ca04c..2eea4dcbc8 100644 --- a/src/scheme/scheme_mut.rs +++ b/src/scheme/scheme_mut.rs @@ -61,8 +61,8 @@ pub trait SchemeMut { }, SYS_CLOSE => self.close(packet.b), - KSMSG_MMAP_PREP => self.mmap_prep(packet.b, MapFlags::from_bits_truncate(packet.c), packet.d, u64::from(packet.uid) | (u64::from(packet.gid) << 32)), - KSMSG_MUNMAP => self.munmap(packet.b, packet.c, u64::from(packet.uid) | (u64::from(packet.gid) << 32)), + KSMSG_MMAP_PREP => self.mmap_prep(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MapFlags::from_bits_truncate(packet.d)), + KSMSG_MUNMAP => self.munmap(packet.b, u64::from(packet.uid) | (u64::from(packet.gid) << 32), packet.c, MunmapFlags::from_bits_truncate(packet.d)), _ => Err(Error::new(ENOSYS)) }; @@ -183,12 +183,12 @@ pub trait SchemeMut { } #[allow(unused_variables)] - fn mmap_prep(&mut self, id: usize, flags: MapFlags, size: usize, offset: u64) -> Result { + fn mmap_prep(&mut self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result { Err(Error::new(EOPNOTSUPP)) } #[allow(unused_variables)] - fn munmap(&mut self, id: usize, size: usize, offset: u64) -> Result { + fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result { Err(Error::new(EOPNOTSUPP)) } }