- extern u8_t __kexec_end;
- // 将内核占据的页,包括前1MB,hhk_init 设为已占用
- size_t pg_count = ((ptr_t)&__kexec_end - KERNEL_EXEC) >> PG_SIZE_BITS;
- pmm_mark_chunk_occupied(0, pg_count, PP_FGLOCKED);
-
- // reserve higher half
- for (size_t i = L1_INDEX(KERNEL_EXEC); i < 1023; i++) {
- assert(vmm_set_mapping(VMS_SELF, i << 22, 0, 0, VMAP_NOMAP));
- }
+ pte_t* ptep = mkptep_va(VMS_SELF, KERNEL_RESIDENT);
+
+ ptep = mkl0tep(ptep);
+
+ unsigned int i = ptep_vfn(ptep);
+ do {
+ if (l0tep_impile_vmnts(ptep)) {
+ ptep++;
+ continue;
+ }
+
+#if LnT_ENABLED(1)
+ assert(mkl1t(ptep++, 0, KERNEL_DATA));
+#elif LnT_ENABLED(2)
+ assert(mkl2t(ptep++, 0, KERNEL_DATA));
+#elif LnT_ENABLED(3)
+ assert(mkl3t(ptep++, 0, KERNEL_DATA));
+#else
+ assert(mklft(ptep++, 0, KERNEL_DATA));
+#endif
+ } while (++i < MAX_PTEN);