Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 434 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
static __inline pd_entry_t * | static __inline pd_entry_t * | ||||
pmap_l1_to_l2(pd_entry_t *l1p, vm_offset_t va) | pmap_l1_to_l2(pd_entry_t *l1p, vm_offset_t va) | ||||
{ | { | ||||
pd_entry_t l1, *l2p; | pd_entry_t l1, *l2p; | ||||
l1 = pmap_load(l1p); | l1 = pmap_load(l1p); | ||||
KASSERT((l1 & ATTR_DESCR_MASK) == L1_TABLE, | KASSERT((l1 & ATTR_DESCR_TYPE_MASK) == ATTR_DESCR_TYPE_TABLE, | ||||
("%s: L1 entry %#lx is a leaf", __func__, l1)); | ("%s: L1 entry %#lx is a leaf", __func__, l1)); | ||||
l2p = (pd_entry_t *)PHYS_TO_DMAP(l1 & ~ATTR_MASK); | l2p = (pd_entry_t *)PHYS_TO_DMAP(l1 & ~ATTR_MASK); | ||||
return (&l2p[pmap_l2_index(va)]); | return (&l2p[pmap_l2_index(va)]); | ||||
} | } | ||||
static __inline pd_entry_t * | static __inline pd_entry_t * | ||||
pmap_l2(pmap_t pmap, vm_offset_t va) | pmap_l2(pmap_t pmap, vm_offset_t va) | ||||
{ | { | ||||
pd_entry_t *l1; | pd_entry_t *l1; | ||||
l1 = pmap_l1(pmap, va); | l1 = pmap_l1(pmap, va); | ||||
if ((pmap_load(l1) & ATTR_DESCR_MASK) != L1_TABLE) | if ((pmap_load(l1) & ATTR_DESCR_MASK) != L1_TABLE) | ||||
return (NULL); | return (NULL); | ||||
return (pmap_l1_to_l2(l1, va)); | return (pmap_l1_to_l2(l1, va)); | ||||
} | } | ||||
static __inline pt_entry_t * | static __inline pt_entry_t * | ||||
pmap_l2_to_l3(pd_entry_t *l2p, vm_offset_t va) | pmap_l2_to_l3(pd_entry_t *l2p, vm_offset_t va) | ||||
{ | { | ||||
pd_entry_t l2; | pd_entry_t l2; | ||||
pt_entry_t *l3p; | pt_entry_t *l3p; | ||||
l2 = pmap_load(l2p); | l2 = pmap_load(l2p); | ||||
KASSERT((l2 & ATTR_DESCR_MASK) == L2_TABLE, | KASSERT((l2 & ATTR_DESCR_TYPE_MASK) == ATTR_DESCR_TYPE_TABLE, | ||||
("%s: L2 entry %#lx is a leaf", __func__, l2)); | ("%s: L2 entry %#lx is a leaf", __func__, l2)); | ||||
l3p = (pt_entry_t *)PHYS_TO_DMAP(l2 & ~ATTR_MASK); | l3p = (pt_entry_t *)PHYS_TO_DMAP(l2 & ~ATTR_MASK); | ||||
return (&l3p[pmap_l3_index(va)]); | return (&l3p[pmap_l3_index(va)]); | ||||
} | } | ||||
/* | /* | ||||
* Returns the lowest valid pde for a given virtual address. | * Returns the lowest valid pde for a given virtual address. | ||||
* The next level may or may not point to a valid page or block. | * The next level may or may not point to a valid page or block. | ||||
▲ Show 20 Lines • Show All 6,417 Lines • Show Last 20 Lines |