Changeset View
Changeset View
Standalone View
Standalone View
sys/riscv/riscv/pmap.c
Show First 20 Lines • Show All 1,279 Lines • ▼ Show 20 Lines | _pmap_alloc_l3(pmap_t pmap, vm_pindex_t ptepindex, struct rwlock **lockp) | ||||
*/ | */ | ||||
if (ptepindex >= NUL1E) { | if (ptepindex >= NUL1E) { | ||||
pd_entry_t *l1; | pd_entry_t *l1; | ||||
vm_pindex_t l1index; | vm_pindex_t l1index; | ||||
l1index = ptepindex - NUL1E; | l1index = ptepindex - NUL1E; | ||||
l1 = &pmap->pm_l1[l1index]; | l1 = &pmap->pm_l1[l1index]; | ||||
KASSERT((pmap_load(l1) & PTE_V) == 0, | |||||
("%s: L1 entry %#lx is valid", __func__, pmap_load(l1))); | |||||
pn = (VM_PAGE_TO_PHYS(m) / PAGE_SIZE); | pn = (VM_PAGE_TO_PHYS(m) / PAGE_SIZE); | ||||
entry = (PTE_V); | entry = (PTE_V); | ||||
entry |= (pn << PTE_PPN0_S); | entry |= (pn << PTE_PPN0_S); | ||||
pmap_store(l1, entry); | pmap_store(l1, entry); | ||||
pmap_distribute_l1(pmap, l1index, entry); | pmap_distribute_l1(pmap, l1index, entry); | ||||
} else { | } else { | ||||
vm_pindex_t l1index; | vm_pindex_t l1index; | ||||
Show All 13 Lines | if (pmap_load(l1) == 0) { | ||||
phys = PTE_TO_PHYS(pmap_load(l1)); | phys = PTE_TO_PHYS(pmap_load(l1)); | ||||
pdpg = PHYS_TO_VM_PAGE(phys); | pdpg = PHYS_TO_VM_PAGE(phys); | ||||
pdpg->ref_count++; | pdpg->ref_count++; | ||||
} | } | ||||
phys = PTE_TO_PHYS(pmap_load(l1)); | phys = PTE_TO_PHYS(pmap_load(l1)); | ||||
l2 = (pd_entry_t *)PHYS_TO_DMAP(phys); | l2 = (pd_entry_t *)PHYS_TO_DMAP(phys); | ||||
l2 = &l2[ptepindex & Ln_ADDR_MASK]; | l2 = &l2[ptepindex & Ln_ADDR_MASK]; | ||||
KASSERT((pmap_load(l2) & PTE_V) == 0, | |||||
("%s: L2 entry %#lx is valid", __func__, pmap_load(l2))); | |||||
pn = (VM_PAGE_TO_PHYS(m) / PAGE_SIZE); | pn = (VM_PAGE_TO_PHYS(m) / PAGE_SIZE); | ||||
entry = (PTE_V); | entry = (PTE_V); | ||||
entry |= (pn << PTE_PPN0_S); | entry |= (pn << PTE_PPN0_S); | ||||
pmap_store(l2, entry); | pmap_store(l2, entry); | ||||
} | } | ||||
pmap_resident_count_inc(pmap, 1); | pmap_resident_count_inc(pmap, 1); | ||||
▲ Show 20 Lines • Show All 3,350 Lines • Show Last 20 Lines |