Date: Wed, 18 Jun 2025 23:07:05 GMT From: Alan Cox <alc@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: deddede58e83 - main - arm64 pmap: use the counter(9) KPI for L2 superpages Message-ID: <202506182307.55IN75Ro074109@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by alc: URL: https://cgit.FreeBSD.org/src/commit/?id=deddede58e834966149b00757d61de537ed81542 commit deddede58e834966149b00757d61de537ed81542 Author: Alan Cox <alc@FreeBSD.org> AuthorDate: 2025-06-14 20:18:01 +0000 Commit: Alan Cox <alc@FreeBSD.org> CommitDate: 2025-06-18 23:05:58 +0000 arm64 pmap: use the counter(9) KPI for L2 superpages Use the counter(9) KPI instead of atomics to maintain the L2 superpage mapping counts. (A similar change was made to the amd64 pmap in 2021.) While here, update the SYSCTL descriptions to reflect the possibility that the base page size is 16KB. --- sys/arm64/arm64/pmap.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 3529314b07c7..a53e8b3684e3 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -1798,21 +1798,21 @@ SYSCTL_COUNTER_U64(_vm_pmap_l2c, OID_AUTO, demotions, CTLFLAG_RD, static SYSCTL_NODE(_vm_pmap, OID_AUTO, l2, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "2MB page mapping counters"); -static u_long pmap_l2_demotions; -SYSCTL_ULONG(_vm_pmap_l2, OID_AUTO, demotions, CTLFLAG_RD, - &pmap_l2_demotions, 0, "2MB page demotions"); +static COUNTER_U64_DEFINE_EARLY(pmap_l2_demotions); +SYSCTL_COUNTER_U64(_vm_pmap_l2, OID_AUTO, demotions, CTLFLAG_RD, + &pmap_l2_demotions, "L2 (2MB/32MB) page demotions"); -static u_long pmap_l2_mappings; -SYSCTL_ULONG(_vm_pmap_l2, OID_AUTO, mappings, CTLFLAG_RD, - &pmap_l2_mappings, 0, "2MB page mappings"); +static COUNTER_U64_DEFINE_EARLY(pmap_l2_mappings); +SYSCTL_COUNTER_U64(_vm_pmap_l2, OID_AUTO, mappings, CTLFLAG_RD, + &pmap_l2_mappings, "L2 (2MB/32MB) page mappings"); -static u_long pmap_l2_p_failures; -SYSCTL_ULONG(_vm_pmap_l2, OID_AUTO, p_failures, CTLFLAG_RD, - &pmap_l2_p_failures, 0, "2MB page promotion failures"); +static COUNTER_U64_DEFINE_EARLY(pmap_l2_p_failures); +SYSCTL_COUNTER_U64(_vm_pmap_l2, OID_AUTO, p_failures, CTLFLAG_RD, + &pmap_l2_p_failures, "L2 (2MB/32MB) page promotion failures"); -static u_long pmap_l2_promotions; -SYSCTL_ULONG(_vm_pmap_l2, OID_AUTO, promotions, CTLFLAG_RD, - &pmap_l2_promotions, 0, "2MB page promotions"); +static COUNTER_U64_DEFINE_EARLY(pmap_l2_promotions); +SYSCTL_COUNTER_U64(_vm_pmap_l2, OID_AUTO, promotions, CTLFLAG_RD, + &pmap_l2_promotions, "L2 (2MB/32MB) page promotions"); static SYSCTL_NODE(_vm_pmap, OID_AUTO, l3c, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "L3C (64KB/2MB) page mapping counters"); @@ -4875,7 +4875,7 @@ pmap_promote_l2(pmap_t pmap, pd_entry_t *l2, vm_offset_t va, vm_page_t mpte, /* ... is not the first physical page within an L2 block */ if ((PTE_TO_PHYS(newl2) & L2_OFFSET) != 0 || ((newl2 & ATTR_DESCR_MASK) != L3_PAGE)) { /* ... or is invalid */ - atomic_add_long(&pmap_l2_p_failures, 1); + counter_u64_add(pmap_l2_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_l2: failure for va %#lx" " in pmap %p", va, pmap); return (false); @@ -4923,7 +4923,7 @@ setl2: for (l3 = firstl3 + NL3PG - 1; l3 > firstl3; l3--) { oldl3 = pmap_load(l3); if ((PTE_TO_PHYS(oldl3) | (oldl3 & ATTR_DESCR_MASK)) != pa) { - atomic_add_long(&pmap_l2_p_failures, 1); + counter_u64_add(pmap_l2_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_l2: failure for va %#lx" " in pmap %p", va, pmap); return (false); @@ -4942,7 +4942,7 @@ setl3: oldl3 &= ~ATTR_SW_DBM; } if ((oldl3 & ATTR_PROMOTE) != (newl2 & ATTR_PROMOTE)) { - atomic_add_long(&pmap_l2_p_failures, 1); + counter_u64_add(pmap_l2_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_l2: failure for va %#lx" " in pmap %p", va, pmap); return (false); @@ -4972,7 +4972,7 @@ setl3: KASSERT(mpte->pindex == pmap_l2_pindex(va), ("pmap_promote_l2: page table page's pindex is wrong")); if (pmap_insert_pt_page(pmap, mpte, true, all_l3e_AF != 0)) { - atomic_add_long(&pmap_l2_p_failures, 1); + counter_u64_add(pmap_l2_p_failures, 1); CTR2(KTR_PMAP, "pmap_promote_l2: failure for va %#lx in pmap %p", va, pmap); @@ -4984,7 +4984,7 @@ setl3: pmap_update_entry(pmap, l2, newl2 | L2_BLOCK, va & ~L2_OFFSET, L2_SIZE); - atomic_add_long(&pmap_l2_promotions, 1); + counter_u64_add(pmap_l2_promotions, 1); CTR2(KTR_PMAP, "pmap_promote_l2: success for va %#lx in pmap %p", va, pmap); return (true); @@ -5830,7 +5830,7 @@ pmap_enter_l2(pmap_t pmap, vm_offset_t va, pd_entry_t new_l2, u_int flags, pmap_store(l2, new_l2); dsb(ishst); - atomic_add_long(&pmap_l2_mappings, 1); + counter_u64_add(pmap_l2_mappings, 1); CTR2(KTR_PMAP, "pmap_enter_l2: success for va %#lx in pmap %p", va, pmap); @@ -6602,7 +6602,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, pmap_store(l2, srcptepaddr); pmap_resident_count_inc(dst_pmap, L2_SIZE / PAGE_SIZE); - atomic_add_long(&pmap_l2_mappings, 1); + counter_u64_add(pmap_l2_mappings, 1); } else pmap_abort_ptp(dst_pmap, addr, dst_m); continue; @@ -8563,7 +8563,7 @@ pmap_demote_l2_locked(pmap_t pmap, pt_entry_t *l2, vm_offset_t va, if ((oldl2 & ATTR_SW_MANAGED) != 0) pmap_pv_demote_l2(pmap, va, PTE_TO_PHYS(oldl2), lockp); - atomic_add_long(&pmap_l2_demotions, 1); + counter_u64_add(pmap_l2_demotions, 1); CTR3(KTR_PMAP, "pmap_demote_l2: success for va %#lx" " in pmap %p %lx", va, pmap, l3[0]);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506182307.55IN75Ro074109>