+ plist_len = leaf_count(bctx->mem.size);
+ plist_size = plist_len * sizeof(struct ppage);
+ nr_huges = page_count(plist_size, lnt_page_size(2));
+
+ ptr_t pkernel_end = to_kphysical(kernel_end);
+ pkernel_end = napot_upaligned(pkernel_end, L2T_SIZE);
+ pkernel_end += plist_size;
+
+ for (int i = 0; i < bctx->mem.mmap_len; i++)
+ {
+ ment = &bctx->mem.mmap[i];
+ if (ment->type != BOOT_MMAP_FREE) {
+ continue;
+ }
+
+ if (pkernel_end >= ment->start + ment->size) {
+ continue;
+ }
+
+ memory->pplist = __setup_pmem_map(pkernel_end, plist_size);;
+ memory->list_len = plist_len;
+ return pkernel_end;