Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 615 Lines • ▼ Show 20 Lines | pmap_bootstrap_l2(vm_offset_t l1pt, vm_offset_t va, vm_offset_t l2_start) | ||||
memset((void *)l2_start, 0, l2pt - l2_start); | memset((void *)l2_start, 0, l2pt - l2_start); | ||||
return l2pt; | return l2pt; | ||||
} | } | ||||
static vm_offset_t | static vm_offset_t | ||||
pmap_bootstrap_l3(vm_offset_t l1pt, vm_offset_t va, vm_offset_t l3_start) | pmap_bootstrap_l3(vm_offset_t l1pt, vm_offset_t va, vm_offset_t l3_start) | ||||
{ | { | ||||
vm_offset_t l2pt, l3pt; | vm_offset_t l3pt; | ||||
vm_paddr_t pa; | vm_paddr_t pa; | ||||
pd_entry_t *l2; | pd_entry_t *l2; | ||||
u_int l2_slot; | u_int l2_slot; | ||||
KASSERT((va & L2_OFFSET) == 0, ("Invalid virtual address")); | KASSERT((va & L2_OFFSET) == 0, ("Invalid virtual address")); | ||||
l2 = pmap_l2(kernel_pmap, va); | l2 = pmap_l2(kernel_pmap, va); | ||||
l2 = (pd_entry_t *)rounddown2((uintptr_t)l2, PAGE_SIZE); | l2 = (pd_entry_t *)rounddown2((uintptr_t)l2, PAGE_SIZE); | ||||
l2pt = (vm_offset_t)l2; | |||||
l2_slot = pmap_l2_index(va); | l2_slot = pmap_l2_index(va); | ||||
l3pt = l3_start; | l3pt = l3_start; | ||||
for (; va < VM_MAX_KERNEL_ADDRESS; l2_slot++, va += L2_SIZE) { | for (; va < VM_MAX_KERNEL_ADDRESS; l2_slot++, va += L2_SIZE) { | ||||
KASSERT(l2_slot < Ln_ENTRIES, ("Invalid L2 index")); | KASSERT(l2_slot < Ln_ENTRIES, ("Invalid L2 index")); | ||||
pa = pmap_early_vtophys(l1pt, l3pt); | pa = pmap_early_vtophys(l1pt, l3pt); | ||||
pmap_load_store(&l2[l2_slot], | pmap_load_store(&l2[l2_slot], | ||||
▲ Show 20 Lines • Show All 4,197 Lines • Show Last 20 Lines |