X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/28c176b668c841a3b7fb093faccf0efa39257603..9e622bd093f8e106b7e8a00f55620f13cc5cd87f:/lunaix-os/kernel/boot_helper.c diff --git a/lunaix-os/kernel/boot_helper.c b/lunaix-os/kernel/boot_helper.c index 3652959..37e6bb4 100644 --- a/lunaix-os/kernel/boot_helper.c +++ b/lunaix-os/kernel/boot_helper.c @@ -4,9 +4,8 @@ #include #include #include -#include - -extern unsigned char __kexec_end[], __kexec_start[]; +#include +#include /** * @brief Reserve memory for kernel bootstrapping initialization @@ -21,7 +20,7 @@ boot_begin(struct boot_handoff* bhctx) boot_begin_arch_reserve(bhctx); // 将内核占据的页,包括前1MB,hhk_init 设为已占用 - size_t pg_count = leaf_count(to_kphysical(__kexec_end)); + size_t pg_count = leaf_count(to_kphysical(kernel_load_end)); pmm_onhold_range(0, pg_count); size_t i; @@ -44,7 +43,20 @@ boot_begin(struct boot_handoff* bhctx) } } -extern u8_t __kboot_end; /* link/linker.ld */ +static void +__free_reclaimable() +{ + ptr_t start; + pfn_t pgs; + pte_t* ptep; + + start = reclaimable_start; + pgs = leaf_count(reclaimable_end - start); + ptep = mkptep_va(VMS_SELF, start); + + pmm_unhold_range(pfn(to_kphysical(start)), pgs); + vmm_unset_ptes(ptep, pgs); +} /** * @brief Release memory for kernel bootstrapping initialization @@ -67,6 +79,8 @@ boot_end(struct boot_handoff* bhctx) bhctx->release(bhctx); boot_clean_arch_reserve(bhctx); + + __free_reclaimable(); } void