From e669d38d2d801a93b7bdc5db1e621ac3235aaf60 Mon Sep 17 00:00:00 2001 From: Zejun Zhao Date: Tue, 3 Jun 2025 15:27:07 +0800 Subject: [PATCH] Clear User bits of non-leaf PTE in boot pagetable --- ostd/src/mm/page_table/boot_pt.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/ostd/src/mm/page_table/boot_pt.rs b/ostd/src/mm/page_table/boot_pt.rs index 36e4ad39..bad279fd 100644 --- a/ostd/src/mm/page_table/boot_pt.rs +++ b/ostd/src/mm/page_table/boot_pt.rs @@ -136,11 +136,9 @@ impl BootPageTable { let root_pt = crate::arch::mm::current_page_table_paddr() / C::BASE_PAGE_SIZE; // Make sure the 2 available bits are not set for firmware page tables. dfs_walk_on_leave::(root_pt, C::NR_LEVELS, &mut |pte: &mut E| { - let prop = pte.prop(); - pte.set_prop(PageProperty::new( - prop.flags | PTE_POINTS_TO_FIRMWARE_PT, - prop.cache, - )); + let mut prop = pte.prop(); + prop.flags |= PTE_POINTS_TO_FIRMWARE_PT; + pte.set_prop(prop); }); Self { root_pt, @@ -271,11 +269,7 @@ impl BootPageTable { let vaddr = paddr_to_vaddr(frame_paddr) as *mut u8; unsafe { core::ptr::write_bytes(vaddr, 0, PAGE_SIZE) }; - let mut pte = E::new_pt(frame_paddr); - let prop = pte.prop(); - pte.set_prop(PageProperty::new(prop.flags, prop.cache)); - - pte + E::new_pt(frame_paddr) } #[cfg(ktest)]