git: 0b8372b707a5 - main - riscv: Port improvements from arm64/amd64 pmaps, part 3
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 02 Nov 2023 18:47:46 UTC
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=0b8372b707a50c2deeaf66d4c55fec51007cec44
commit 0b8372b707a50c2deeaf66d4c55fec51007cec44
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2023-11-02 18:34:07 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2023-11-02 18:34:07 +0000
riscv: Port improvements from arm64/amd64 pmaps, part 3
- Let pmap_enter_quick_locked() trigger superpage promotions.
Reviewed by: kib
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D42290
---
sys/riscv/riscv/pmap.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c
index 9b2866d7dd4d..ebb0f069b4ab 100644
--- a/sys/riscv/riscv/pmap.c
+++ b/sys/riscv/riscv/pmap.c
@@ -3405,6 +3405,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
("pmap_enter_quick_locked: managed mapping within the clean submap"));
rw_assert(&pvh_global_lock, RA_LOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
+ l2 = NULL;
CTR2(KTR_PMAP, "pmap_enter_quick_locked: %p %lx", pmap, va);
/*
@@ -3503,6 +3504,26 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
pmap_store(l3, newl3);
+#if VM_NRESERVLEVEL > 0
+ /*
+ * If both the PTP and the reservation are fully populated, then attempt
+ * promotion.
+ */
+ if ((mpte == NULL || mpte->ref_count == Ln_ENTRIES) &&
+ (m->flags & PG_FICTITIOUS) == 0 &&
+ vm_reserv_level_iffullpop(m) == 0) {
+ if (l2 == NULL)
+ l2 = pmap_l2(pmap, va);
+
+ /*
+ * If promotion succeeds, then the next call to this function
+ * should not be given the unmapped PTP as a hint.
+ */
+ if (pmap_promote_l2(pmap, l2, va, mpte, lockp))
+ mpte = NULL;
+ }
+#endif
+
pmap_invalidate_page(pmap, va);
return (mpte);
}