From 195fe855a1344580ecb12841dc726d012ffdbf24 Mon Sep 17 00:00:00 2001 From: Zhang Junyang Date: Sat, 14 Sep 2024 12:08:41 +0800 Subject: [PATCH] Mark all surrounding pages accessed on page fault --- kernel/src/vm/vmar/vm_mapping.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/src/vm/vmar/vm_mapping.rs b/kernel/src/vm/vmar/vm_mapping.rs index 1859f6947..7fa18d152 100644 --- a/kernel/src/vm/vmar/vm_mapping.rs +++ b/kernel/src/vm/vmar/vm_mapping.rs @@ -345,10 +345,10 @@ impl VmMapping { let mut cursor = vm_space.cursor_mut(&(start_addr..end_addr))?; let operate = move |commit_fn: &mut dyn FnMut() -> Result| { if let VmItem::NotMapped { va, len } = cursor.query().unwrap() { - let mut page_flags = vm_perms.into(); - if (va..len).contains(&page_fault_addr) { - page_flags |= PageFlags::ACCESSED; - } + // We regard all the surrounding pages as accessed, no matter + // if it is really so. Then the hardware won't bother to update + // the accessed bit of the page table on following accesses. + let page_flags = PageFlags::from(vm_perms) | PageFlags::ACCESSED; let page_prop = PageProperty::new(page_flags, CachePolicy::Writeback); let frame = commit_fn()?; cursor.map(frame, page_prop);