From 5c7c1bb39b4e0d59496a66f64d9097f2fc9eab70 Mon Sep 17 00:00:00 2001 From: Zhang Junyang Date: Wed, 12 Jun 2024 07:28:38 +0000 Subject: [PATCH] Make earlier the initialization of the kernel page table --- framework/aster-frame/src/lib.rs | 4 ++-- framework/aster-frame/src/mm/kspace.rs | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/framework/aster-frame/src/lib.rs b/framework/aster-frame/src/lib.rs index 1f2c7bcfc..7fc827a9d 100644 --- a/framework/aster-frame/src/lib.rs +++ b/framework/aster-frame/src/lib.rs @@ -77,14 +77,14 @@ pub fn init() { mm::page::allocator::init(); let mut boot_pt = mm::get_boot_pt(); - let meta_pages = mm::init_page_meta(&mut boot_pt); + mm::kspace::init_kernel_page_table(mm::init_page_meta(&mut boot_pt)); mm::misc_init(); trap::init(); arch::after_all_init(); bus::init(); - mm::kspace::init_kernel_page_table(boot_pt, meta_pages); + mm::kspace::activate_kernel_page_table(boot_pt); invoke_ffi_init_funcs(); } diff --git a/framework/aster-frame/src/mm/kspace.rs b/framework/aster-frame/src/mm/kspace.rs index 406a35cd1..5c69c05c3 100644 --- a/framework/aster-frame/src/mm/kspace.rs +++ b/framework/aster-frame/src/mm/kspace.rs @@ -106,10 +106,7 @@ pub static KERNEL_PAGE_TABLE: Once, - meta_pages: Vec>, -) { +pub fn init_kernel_page_table(meta_pages: Vec>) { info!("Initializing the kernel page table"); let regions = crate::boot::memory_regions(); @@ -201,14 +198,18 @@ pub fn init_kernel_page_table( } } + KERNEL_PAGE_TABLE.call_once(|| kpt); +} + +pub fn activate_kernel_page_table(boot_pt: BootPageTable) { + let kpt = KERNEL_PAGE_TABLE + .get() + .expect("The kernel page table is not initialized yet"); // SAFETY: the kernel page table is initialized properly. unsafe { kpt.first_activate_unchecked(); crate::arch::mm::tlb_flush_all_including_global(); } - - KERNEL_PAGE_TABLE.call_once(|| kpt); - // SAFETY: the boot page table is OK to be retired now since // the kernel page table is activated. unsafe { boot_pt.retire() };