From 8832dc1f4179ead6598d6232273b5783f7cbaead Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Wed, 16 Nov 2022 14:46:39 -0500 Subject: [PATCH 10/52] mips: Support pmap_enter(psind == 1) in the new pmap Seems to work in light testing. --- sys/mips/mips/pmap_mips64.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/sys/mips/mips/pmap_mips64.c b/sys/mips/mips/pmap_mips64.c index b07d6a56b3e0..cd6b3c338d23 100644 --- a/sys/mips/mips/pmap_mips64.c +++ b/sys/mips/mips/pmap_mips64.c @@ -2992,7 +2992,7 @@ setpte: */ int pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, - u_int flags, int8_t psind __unused) + u_int flags, int8_t psind) { struct rwlock *lock; vm_paddr_t pa, opa; @@ -3002,6 +3002,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, pv_entry_t pv; vm_page_t mpte, om; boolean_t nosleep; + int rv; va = trunc_page(va); KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig")); @@ -3012,11 +3013,18 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, VM_OBJECT_ASSERT_LOCKED(m->object); mpte = NULL; - lock = NULL; rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); + if (psind == 1) { + /* XXX-MJ needs more review */ + KASSERT((va & PDRMASK) == 0, ("pmap_enter: va unaligned")); + KASSERT(m->psind > 0, ("pmap_enter: m->psind < psind")); + rv = pmap_enter_pde(pmap, va, m, prot, flags, &lock); + goto out; + } + /* * In the case that a page table page is not resident, we are * creating it here. @@ -3237,11 +3245,14 @@ validate: mips_dcache_wbinv_range(va, PAGE_SIZE); } } + + rv = KERN_SUCCESS; +out: if (lock != NULL) rw_wunlock(lock); rw_runlock(&pvh_global_lock); PMAP_UNLOCK(pmap); - return (KERN_SUCCESS); + return (rv); } /* -- 2.41.0