From 3055390c25bb7b12279df174689ba09ec50c7d46 Mon Sep 17 00:00:00 2001 From: Jomo Date: Sat, 9 Mar 2024 11:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=87=8D=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E8=BF=87=E7=A8=8B=E4=B8=AD=E8=8E=B7=E5=8F=96=E6=96=B0=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E5=8C=BA=E5=9F=9F=E6=97=B6=E7=9A=84map=5Fflags=20(#56?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/src/mm/syscall.rs | 4 ++++ kernel/src/mm/ucontext.rs | 11 ++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/kernel/src/mm/syscall.rs b/kernel/src/mm/syscall.rs index 4d0cde0d0..13b1e72cd 100644 --- a/kernel/src/mm/syscall.rs +++ b/kernel/src/mm/syscall.rs @@ -129,6 +129,10 @@ impl Into for VmFlags { map_flags |= MapFlags::MAP_SYNC; } + if self.contains(VmFlags::VM_MAYSHARE) { + map_flags |= MapFlags::MAP_SHARED; + } + map_flags } } diff --git a/kernel/src/mm/ucontext.rs b/kernel/src/mm/ucontext.rs index 10ef700db..352caedfc 100644 --- a/kernel/src/mm/ucontext.rs +++ b/kernel/src/mm/ucontext.rs @@ -409,18 +409,19 @@ impl InnerAddressSpace { return Err(SystemError::EINVAL); } + // 初始化映射标志 + let mut map_flags: MapFlags = vm_flags.into(); + // 初始化内存区域保护标志 + let prot_flags: ProtFlags = vm_flags.into(); + // 取消新内存区域的原映射 if mremap_flags.contains(MremapFlags::MREMAP_FIXED) { + map_flags |= MapFlags::MAP_FIXED; let start_page = VirtPageFrame::new(new_vaddr); let page_count = PageFrameCount::from_bytes(new_len).unwrap(); self.munmap(start_page, page_count)?; } - // 初始化映射标志 - let map_flags: MapFlags = vm_flags.into(); - // 初始化内存区域保护标志 - let prot_flags: ProtFlags = vm_flags.into(); - // 获取映射后的新内存页面 let new_page = self.map_anonymous(new_vaddr, new_len, prot_flags, map_flags, true)?; let new_page_vaddr = new_page.virt_address();