From 0594a73ac927c20ccef8c9c2520b36b8c174eb53 Mon Sep 17 00:00:00 2001 From: Chen Chengjun Date: Sun, 28 Apr 2024 16:54:15 +0800 Subject: [PATCH] Improve the efficiency of unmap in VmMappingInner --- kernel/aster-nix/src/vm/vmar/vm_mapping.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kernel/aster-nix/src/vm/vmar/vm_mapping.rs b/kernel/aster-nix/src/vm/vmar/vm_mapping.rs index 9cada88e..bd9e4660 100644 --- a/kernel/aster-nix/src/vm/vmar/vm_mapping.rs +++ b/kernel/aster-nix/src/vm/vmar/vm_mapping.rs @@ -503,13 +503,13 @@ impl VmMappingInner { let vmo_map_range = (range.start - map_to_addr + self.vmo_offset) ..(range.end - map_to_addr + self.vmo_offset); let page_idx_range = get_page_idx_range(&vmo_map_range); - for page_idx in page_idx_range { - if self.mapped_pages.contains(&page_idx) { - self.unmap_one_page(vm_space, page_idx)?; - } + let original_mapped_pages = self.mapped_pages.clone(); + let mapped_pages_in_range = original_mapped_pages.range(page_idx_range); + for page_idx in mapped_pages_in_range { + self.unmap_one_page(vm_space, *page_idx)?; } if may_destroy && *range == self.range() { - self.is_destroyed = false; + self.is_destroyed = true; } Ok(()) }