#include <lunaix/spike.h>
#define VMAP_START PG_MOUNT_BASE + MEM_4MB
-#define VMAP_END PD_REFERENCED
+#define VMAP_END VMS_SELF
static uintptr_t start = VMAP_START;
current_addr = (current_addr & 0xffc00000) + MEM_4MB;
} else {
x86_page_table* ptd = (x86_page_table*)(L2_VADDR(l1inx));
- size_t i = L2_INDEX(current_addr);
- for (; i < PG_MAX_ENTRIES && examed_size < size; i++) {
+ size_t i = L2_INDEX(current_addr), j = 0;
+ for (; i < PG_MAX_ENTRIES && examed_size < size; i++, j++) {
if (!ptd->entry[i]) {
examed_size += PG_SIZE;
} else if (examed_size) {
// found a discontinuity, start from beginning
examed_size = 0;
- i++;
+ j++;
break;
}
}
- current_addr += i << 12;
+ current_addr += j << 12;
}
if (examed_size >= size) {
if (current_addr >= VMAP_END) {
wrapped = 1;
+ examed_size = 0;
current_addr = VMAP_START;
}
}
done:
uintptr_t alloc_begin = current_addr - examed_size;
for (size_t i = 0; i < size; i += PG_SIZE) {
- vmm_set_mapping(
- PD_REFERENCED, alloc_begin + i, paddr + i, PG_PREM_RW, 0);
+ vmm_set_mapping(VMS_SELF, alloc_begin + i, paddr + i, PG_PREM_RW, 0);
pmm_ref_page(KERNEL_PID, paddr + i);
}
start = alloc_begin + size;