/DragonOS/kernel/src/mm/ |
H A D | fault.rs | 51 vma: Arc<LockedVMA>, field 68 vma: Arc<LockedVMA>, in new() 73 let guard = vma.lock_irqsave(); in new() 78 vma: vma.clone(), in new() 90 pub fn vma(&self) -> Arc<LockedVMA> { in vma() method 91 self.vma.clone() in vma() 127 let vma = pfm.vma(); in handle_mm_fault() localVariable 133 vma.clone(), in handle_mm_fault() 141 let guard = vma.lock_irqsave(); in handle_mm_fault() 163 let vma = pfm.vma.clone(); in handle_normal_fault() localVariable [all …]
|
H A D | madvise.rs | 15 let mut vma = self.lock_irqsave(); in do_madvise() localVariable 16 let mut new_flags = *vma.vm_flags(); in do_madvise() 56 if vma.vm_flags().contains(VmFlags::VM_IO) { in do_madvise() 81 vma.set_vm_flags(new_flags); in do_madvise()
|
H A D | ucontext.rs | 179 for vma in self.mappings.vmas.iter() { in try_clone() 182 let vma_guard: SpinLockGuard<'_, VMA> = vma.lock_irqsave(); in try_clone() 733 for vma in self.mappings.iter_vmas() { in unmap_all() 734 if vma.mapped() { in unmap_all() 735 vma.unmap(&mut self.user_mapper.utable, &mut flusher); in unmap_all() 1032 pub fn insert_vma(&mut self, vma: Arc<LockedVMA>) { in insert_vma() 1033 let region = vma.lock_irqsave().region; in insert_vma() 1038 self.vmas.insert(vma); in insert_vma() 1051 let vma: Arc<LockedVMA> = self in remove_vma() localVariable 1053 .drain_filter(|vma| vma.lock_irqsave().region == *region) in remove_vma() [all …]
|
H A D | syscall.rs | 404 let vma = current_address_space.read().mappings.contains(old_vaddr); in mremap() localVariable 405 if vma.is_none() { in mremap() 408 let vma = vma.unwrap(); in mremap() localVariable 409 let vm_flags = *vma.lock_irqsave().vm_flags(); in mremap() 591 if let Some(vma) = next_vma.clone() { in msync() 592 let guard = vma.lock_irqsave(); in msync()
|
H A D | page.rs | 191 for vma in page.read_irqsave().anon_vma() { in shrink_list() 192 let address_space = vma.lock_irqsave().address_space().unwrap(); in shrink_list() 196 let virt = vma.lock_irqsave().page_address(&page).unwrap(); in shrink_list() 228 for vma in page.read_irqsave().anon_vma() { in page_writeback() 229 let address_space = vma.lock_irqsave().address_space().unwrap(); in page_writeback() 233 let virt = vma.lock_irqsave().page_address(page).unwrap(); in page_writeback() 369 pub fn insert_vma(&mut self, vma: Arc<LockedVMA>) { in insert_vma() 370 self.anon_vma.insert(vma); in insert_vma() 375 pub fn remove_vma(&mut self, vma: &LockedVMA) { in remove_vma() 376 self.anon_vma.remove(vma); in remove_vma()
|
/DragonOS/kernel/src/arch/x86_64/mm/ |
H A D | fault.rs | 33 pub fn vma_access_error(vma: Arc<LockedVMA>, error_code: X86PfErrorCode) -> bool { in vma_access_error() 34 let vm_flags = *vma.lock_irqsave().vm_flags(); in vma_access_error() 45 vma.clone(), in vma_access_error() 64 if unlikely(!vma.is_accessible()) { in vma_access_error() 232 let vma = space_guard.mappings.find_nearest(address); in do_user_addr_fault() localVariable 235 let vma = match vma { in do_user_addr_fault() localVariable 236 Some(vma) => vma, in do_user_addr_fault() 252 let guard = vma.lock_irqsave(); in do_user_addr_fault() 284 if unlikely(Self::vma_access_error(vma.clone(), error_code)) { in do_user_addr_fault() 292 let message = PageFaultMessage::new(vma.clone(), address, flags, mapper); in do_user_addr_fault()
|
H A D | pkru.rs | 18 pub fn vma_pkey(vma: Arc<LockedVMA>) -> u16 { in vma_pkey() 19 let guard = vma.lock_irqsave(); in vma_pkey()
|
H A D | mod.rs | 320 vma: Arc<LockedVMA>, in vma_access_permitted() 328 if foreign | vma.is_foreign() { in vma_access_permitted() 331 pkru::pkru_allows_pkey(pkru::vma_pkey(vma), write) in vma_access_permitted()
|
/DragonOS/kernel/src/ipc/ |
H A D | syscall.rs | 332 let vma = VMA::physmap( in shmat() localVariable 343 address_write_guard.mappings.insert_vma(vma); in shmat() 350 let vma = address_write_guard in shmat() localVariable 354 if vma.lock_irqsave().region().start() != vaddr { in shmat() 371 vma.unmap(&mut address_write_guard.user_mapper.utable, flusher); in shmat() 391 .insert_vma(vma.clone()); in shmat() 398 vma.lock_irqsave().set_mapped(true); in shmat() 425 let vma = address_write_guard in shmdt() localVariable 431 if vma.lock_irqsave().region().start() != vaddr { in shmdt() 460 vma.unmap(&mut address_write_guard.user_mapper.utable, flusher); in shmdt()
|
H A D | shm.rs | 450 .map(|vma| vma.id()) in map_count()
|
/DragonOS/docs/kernel/memory_management/ |
H A D | mmio.md | 28 4. 创建VMA,并将VMA标记为`VM_IO|VM_DONTCOPY`。MMIO的vma只绑定在`initial_mm`下,且不会被拷贝。 31 一旦MMIO地址空间分配完成,它就像普通的vma一样,可以使用mmap系列函数进行操作。 188 | mmio_create(size,vm_flags,res_vaddr,res_length) | 创建一块根据size对齐后的大小的mmio区域,并将其vma绑定到initial_mm |
|
/DragonOS/kernel/src/arch/riscv64/asm/ |
H A D | head.S | 122 sfence.vma 131 sfence.vma
|
/DragonOS/docs/community/ChangeLog/V0.1.x/ |
H A D | V0.1.10.md | 97 - fix(mm): 修复vma映射标志错误 (#801) 228 修复vma映射标志错误 (#801)
|