#include <lunaix/mm/vmm.h>
#include <lunaix/spike.h>
#include <lunaix/kcmd.h>
+#include <lunaix/sections.h>
#include <sys/mm/mm_defs.h>
-extern unsigned char __kexec_end[], __kexec_start[];
-
/**
* @brief Reserve memory for kernel bootstrapping initialization
*
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;
}
}
-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
bhctx->release(bhctx);
boot_clean_arch_reserve(bhctx);
+
+ __free_reclaimable();
}
void