- assert(((uintptr_t)va & 0xFFFU) == 0)
- assert(((uintptr_t)pa & 0xFFFU) == 0)
-
- uint32_t l1_index = L1_INDEX(va);
- uint32_t l2_index = L2_INDEX(va);
- ptd_t* l1pt = (ptd_t*)L1_BASE_VADDR;
-
- // 在页表与页目录中找到一个可用的空位进行映射(位于va或其附近)
- ptd_t l1pte = l1pt[l1_index];
- pt_t* l2pt = (pt_t*)L2_VADDR(l1_index);
- while (l1pte && l1_index < PG_MAX_ENTRIES) {
- if (l2_index == PG_MAX_ENTRIES) {
- l1_index++;
- l2_index = 0;
- l1pte = l1pt[l1_index];
- l2pt = (pt_t*)L2_VADDR(l1_index);
+ memset((void*)l2pt, 0, PG_SIZE);
+ } else {
+ x86_pte_t pte = l2pt->entry[l2_inx];
+ if (pte && (options & VMAP_IGNORE)) {
+ return 1;