完善重映射过程中获取新映射区域时的map_flags (#569)

This commit is contained in:
Jomo
2024-03-09 11:40:44 +08:00
committed by GitHub
parent 5c4224e5a8
commit 3055390c25
2 changed files with 10 additions and 5 deletions

View File

@ -129,6 +129,10 @@ impl Into<MapFlags> for VmFlags {
map_flags |= MapFlags::MAP_SYNC;
}
if self.contains(VmFlags::VM_MAYSHARE) {
map_flags |= MapFlags::MAP_SHARED;
}
map_flags
}
}

View File

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