Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/aim/mmu_radix.c
Show First 20 Lines • Show All 425 Lines • ▼ Show 20 Lines | |||||
static struct mtx qframe_mtx; | static struct mtx qframe_mtx; | ||||
void mmu_radix_activate(struct thread *); | void mmu_radix_activate(struct thread *); | ||||
void mmu_radix_advise(pmap_t, vm_offset_t, vm_offset_t, int); | void mmu_radix_advise(pmap_t, vm_offset_t, vm_offset_t, int); | ||||
void mmu_radix_align_superpage(vm_object_t, vm_ooffset_t, vm_offset_t *, | void mmu_radix_align_superpage(vm_object_t, vm_ooffset_t, vm_offset_t *, | ||||
vm_size_t); | vm_size_t); | ||||
void mmu_radix_clear_modify(vm_page_t); | void mmu_radix_clear_modify(vm_page_t); | ||||
void mmu_radix_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t); | void mmu_radix_copy(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t); | ||||
int mmu_radix_map_user_ptr(pmap_t pm, | |||||
volatile const void *uaddr, void **kaddr, size_t ulen, size_t *klen); | |||||
int mmu_radix_decode_kernel_ptr(vm_offset_t, int *, vm_offset_t *); | int mmu_radix_decode_kernel_ptr(vm_offset_t, int *, vm_offset_t *); | ||||
int mmu_radix_enter(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, u_int, int8_t); | int mmu_radix_enter(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, u_int, int8_t); | ||||
void mmu_radix_enter_object(pmap_t, vm_offset_t, vm_offset_t, vm_page_t, | void mmu_radix_enter_object(pmap_t, vm_offset_t, vm_offset_t, vm_page_t, | ||||
vm_prot_t); | vm_prot_t); | ||||
void mmu_radix_enter_quick(pmap_t, vm_offset_t, vm_page_t, vm_prot_t); | void mmu_radix_enter_quick(pmap_t, vm_offset_t, vm_page_t, vm_prot_t); | ||||
vm_paddr_t mmu_radix_extract(pmap_t pmap, vm_offset_t va); | vm_paddr_t mmu_radix_extract(pmap_t pmap, vm_offset_t va); | ||||
vm_page_t mmu_radix_extract_and_hold(pmap_t, vm_offset_t, vm_prot_t); | vm_page_t mmu_radix_extract_and_hold(pmap_t, vm_offset_t, vm_prot_t); | ||||
void mmu_radix_kenter(vm_offset_t, vm_paddr_t); | void mmu_radix_kenter(vm_offset_t, vm_paddr_t); | ||||
▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | static struct pmap_funcs mmu_radix_methods = { | ||||
.page_set_memattr = mmu_radix_page_set_memattr, | .page_set_memattr = mmu_radix_page_set_memattr, | ||||
.page_array_startup = mmu_radix_page_array_startup, | .page_array_startup = mmu_radix_page_array_startup, | ||||
/* Internal interfaces */ | /* Internal interfaces */ | ||||
.kenter = mmu_radix_kenter, | .kenter = mmu_radix_kenter, | ||||
.kextract = mmu_radix_kextract, | .kextract = mmu_radix_kextract, | ||||
.kremove = mmu_radix_kremove, | .kremove = mmu_radix_kremove, | ||||
.change_attr = mmu_radix_change_attr, | .change_attr = mmu_radix_change_attr, | ||||
.map_user_ptr = mmu_radix_map_user_ptr, | |||||
.decode_kernel_ptr = mmu_radix_decode_kernel_ptr, | .decode_kernel_ptr = mmu_radix_decode_kernel_ptr, | ||||
.tlbie_all = mmu_radix_tlbie_all, | .tlbie_all = mmu_radix_tlbie_all, | ||||
}; | }; | ||||
MMU_DEF(mmu_radix, MMU_TYPE_RADIX, mmu_radix_methods); | MMU_DEF(mmu_radix, MMU_TYPE_RADIX, mmu_radix_methods); | ||||
static boolean_t pmap_demote_l3e_locked(pmap_t pmap, pml3_entry_t *l3e, vm_offset_t va, | static boolean_t pmap_demote_l3e_locked(pmap_t pmap, pml3_entry_t *l3e, vm_offset_t va, | ||||
▲ Show 20 Lines • Show All 5,450 Lines • ▼ Show 20 Lines | |||||
mmu_radix_kremove(vm_offset_t va) | mmu_radix_kremove(vm_offset_t va) | ||||
{ | { | ||||
pt_entry_t *pte; | pt_entry_t *pte; | ||||
CTR2(KTR_PMAP, "%s(%#x)", __func__, va); | CTR2(KTR_PMAP, "%s(%#x)", __func__, va); | ||||
pte = kvtopte(va); | pte = kvtopte(va); | ||||
pte_clear(pte); | pte_clear(pte); | ||||
} | |||||
int mmu_radix_map_user_ptr(pmap_t pm, | |||||
volatile const void *uaddr, void **kaddr, size_t ulen, size_t *klen) | |||||
{ | |||||
if ((uintptr_t)uaddr + ulen >= VM_MAXUSER_ADDRESS || | |||||
(uintptr_t)uaddr + ulen < (uintptr_t)uaddr) | |||||
return (EFAULT); | |||||
*kaddr = (void *)(uintptr_t)uaddr; | |||||
if (klen) | |||||
*klen = ulen; | |||||
return (0); | |||||
} | } | ||||
int | int | ||||
mmu_radix_decode_kernel_ptr(vm_offset_t addr, | mmu_radix_decode_kernel_ptr(vm_offset_t addr, | ||||
int *is_user, vm_offset_t *decoded) | int *is_user, vm_offset_t *decoded) | ||||
{ | { | ||||
CTR2(KTR_PMAP, "%s(%#jx)", __func__, (uintmax_t)addr); | CTR2(KTR_PMAP, "%s(%#jx)", __func__, (uintmax_t)addr); | ||||
▲ Show 20 Lines • Show All 402 Lines • Show Last 20 Lines |