From nobody Thu Apr 23 18:16:28 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g1kn91JYkz6bG6M for ; Thu, 23 Apr 2026 18:16:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g1kn84tdzz3R7L for ; Thu, 23 Apr 2026 18:16:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776968188; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3HY1aRmGG5j34CIOr6r1nBtM7J/FK6CDc49i2Yp/hjA=; b=M7Je2L01TWg2Cwxz8T2655BzQTFKdUM8Oukjo+TuaKaUhJeEmP1YFOhZ+npq5cI0I1nW7v V1C+hemKBlhAyk+jrO7kihz0MAqUDyUWaNECh4ZowG/Rkjd1ZnKAZLc2MvcunQYzcVcDd2 Tn9tCTRA9+7H6OFwX7u3L2pQoVKWuguJ1vQPkiKzeS3MoI/Gj5vxXO4WUfWX0Gq6EyBcnw FQNyveJBPF3SBBoVBOmbhSN6L1UsZZe2G3c2aH6jAtiQBZH/CCbxkU9PU2b/z7eNZ6WWwJ BRtY56Sn+56Ooq8lNAtK32Z60FHeVNazzeqO76x4ryF2wlumIwhlP7oFhAXbbQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776968188; a=rsa-sha256; cv=none; b=jBXARNbgHB4QDpq78vpk/2eODjCC0OC4aG6TUKHJN5JdkL9J8zJhPEwGANzbOgOUf2VZE2 xzTmGIY+8tSTCB/TGlIMgLxAR27cKEbz4nlZdLZIPa6urcBcl5dxWbDX6q6tTqe3+NPz+U XWdZzgN1eHAV/anHV59eVZg2eOFS6TlgtwsCYqHxBWKip/By4djT1xFryuK+etSL+Cjw4f DYE31W9S2m1E8MduAgnCj3zpG7hGyXCXAsekztGz/QCFP8gesGfch9mG4mIrTktDS6NNbj AI9oRbbvbkY2YU1+CuvaPuzV0vYEU7Q6XLCHWeDo5TVzyQCXE6hHeJshIFoiZg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776968188; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3HY1aRmGG5j34CIOr6r1nBtM7J/FK6CDc49i2Yp/hjA=; b=DkcNXe0i+Ep2cMqvsFzbuJ5fzDQGB7dGR3X9RiuW6YXfv3smlkdUfF45NyCJTozb5HNRjK U4L2e76H6AAYdqE94/tkwnWsAz5ZRvHx/C55HKfZLT3rZMxbc06x0WmTIaDRKEnj7kPbi4 Oimqrr9LVgpkcwjSoNb8Sh3f+xrfduzgcQ6B5atYiJ4+BSXLS8Q1ZJtJe1M5FERkJ9p/Dk sgKeXs0kgI8fUHVl8P/I1F9F9ooNo1TE8YE+vtWeELSuno5wy4iBXcCLepHIn+BtiWftff hU7GitjdY+NJl991a3JrdM/oSks8zovHfJf7V6rbuyYVTZOqixsTIS2cIWnYsw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g1kn84T22zCcp for ; Thu, 23 Apr 2026 18:16:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 44f4e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Apr 2026 18:16:28 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 120a5e3e195f - main - DMAP_TO_VM_PAGE: Wrapper macro to map direct map address to a page List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 120a5e3e195f1f780d89ce689e23654422285d62 Auto-Submitted: auto-generated Date: Thu, 23 Apr 2026 18:16:28 +0000 Message-Id: <69ea61fc.44f4e.6789b707@gitrepo.freebsd.org> The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=120a5e3e195f1f780d89ce689e23654422285d62 commit 120a5e3e195f1f780d89ce689e23654422285d62 Author: John Baldwin AuthorDate: 2026-04-23 17:05:55 +0000 Commit: John Baldwin CommitDate: 2026-04-23 17:05:55 +0000 DMAP_TO_VM_PAGE: Wrapper macro to map direct map address to a page Effort: CHERI upstreaming Suggested by: kib Reviewed by: kib Sponsored by: AFRL, DARPA Pull Request: https://github.com/freebsd/freebsd-src/pull/2068 --- sys/amd64/amd64/pmap.c | 30 ++++++++++++++--------------- sys/arm64/arm64/pmap.c | 4 ++-- sys/compat/linuxkpi/common/src/linux_page.c | 2 +- sys/kern/uipc_ktls.c | 2 +- sys/powerpc/aim/mmu_radix.c | 6 +++--- sys/powerpc/booke/pmap_64.c | 10 +++++----- sys/powerpc/powerpc/uma_machdep.c | 2 +- sys/riscv/riscv/pmap.c | 4 ++-- sys/vm/vm_page.h | 2 ++ 9 files changed, 32 insertions(+), 30 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 60a5b5a2da9a..6f8f767c40bd 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -4834,7 +4834,7 @@ pmap_release(pmap_t pmap) KASSERT(CPU_EMPTY(&pmap->pm_active), ("releasing active pmap %p", pmap)); - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pmap->pm_pmltop)); + m = DMAP_TO_VM_PAGE(pmap->pm_pmltop); if (pmap_is_la57(pmap)) { for (i = NPML5EPG / 2; i < NPML5EPG; i++) @@ -4863,7 +4863,7 @@ pmap_release(pmap_t pmap) pmap_pt_page_count_pinit(pmap, -1); if (pmap->pm_pmltopu != NULL) { - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pmap->pm_pmltopu)); + m = DMAP_TO_VM_PAGE(pmap->pm_pmltopu); pmap_free_pt_page(NULL, m, false); pmap_pt_page_count_pinit(pmap, -1); } @@ -5348,7 +5348,7 @@ reclaim_pv_chunk_domain(pmap_t locked_pmap, struct rwlock **lockp, int domain) PV_STAT(counter_u64_add(pc_chunk_count, -1)); PV_STAT(counter_u64_add(pc_chunk_frees, 1)); /* Entire chunk is free; return it. */ - m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m_pc = DMAP_TO_VM_PAGE(pc); dump_drop_page(m_pc->phys_addr); mtx_lock(&pvc->pvc_lock); TAILQ_REMOVE(&pvc->pvc_list, pc, pc_lru); @@ -5449,7 +5449,7 @@ free_pv_chunk_dequeued(struct pv_chunk *pc) PV_STAT(counter_u64_add(pc_chunk_frees, 1)); counter_u64_add(pv_page_count, -1); /* entire chunk is free, return it */ - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m = DMAP_TO_VM_PAGE(pc); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); vm_page_free(m); @@ -10711,7 +10711,7 @@ retry: goto retry; mphys = VM_PAGE_TO_PHYS(m); *pde = mphys | X86_PG_A | X86_PG_RW | X86_PG_V | pg_nx; - PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pde))->ref_count++; + DMAP_TO_VM_PAGE(pde)->ref_count++; } else { MPASS((*pde & X86_PG_PS) == 0); mphys = *pde & PG_FRAME; @@ -10829,7 +10829,7 @@ pmap_large_map(vm_paddr_t spa, vm_size_t len, void **addr, *pde = pa | pg_g | X86_PG_PS | X86_PG_RW | X86_PG_V | X86_PG_A | pg_nx | pmap_cache_bits(kernel_pmap, mattr, true); - PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pde))->ref_count++; + DMAP_TO_VM_PAGE(pde)->ref_count++; inc = NBPDR; } else { pte = pmap_large_map_pte(va); @@ -10837,7 +10837,7 @@ pmap_large_map(vm_paddr_t spa, vm_size_t len, void **addr, *pte = pa | pg_g | X86_PG_RW | X86_PG_V | X86_PG_A | pg_nx | pmap_cache_bits(kernel_pmap, mattr, false); - PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pte))->ref_count++; + DMAP_TO_VM_PAGE(pte)->ref_count++; inc = PAGE_SIZE; } } @@ -10905,7 +10905,7 @@ pmap_large_unmap(void *svaa, vm_size_t len) pd, len)); pde_store(pde, 0); inc = NBPDR; - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pde)); + m = DMAP_TO_VM_PAGE(pde); m->ref_count--; if (m->ref_count == 0) { *pdpe = 0; @@ -10919,12 +10919,12 @@ pmap_large_unmap(void *svaa, vm_size_t len) (u_long)pte, *pte)); pte_clear(pte); inc = PAGE_SIZE; - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pte)); + m = DMAP_TO_VM_PAGE(pte); m->ref_count--; if (m->ref_count == 0) { *pde = 0; SLIST_INSERT_HEAD(&spgf, m, plinks.s.ss); - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pde)); + m = DMAP_TO_VM_PAGE(pde); m->ref_count--; if (m->ref_count == 0) { *pdpe = 0; @@ -11227,7 +11227,7 @@ pmap_pti_wire_pte(void *pte) vm_page_t m; VM_OBJECT_ASSERT_WLOCKED(pti_obj); - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pte)); + m = DMAP_TO_VM_PAGE(pte); m->ref_count++; } @@ -11237,7 +11237,7 @@ pmap_pti_unwire_pde(void *pde, bool only_ref) vm_page_t m; VM_OBJECT_ASSERT_WLOCKED(pti_obj); - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pde)); + m = DMAP_TO_VM_PAGE(pde); MPASS(only_ref || m->ref_count > 1); pmap_pti_free_page(m); } @@ -11249,7 +11249,7 @@ pmap_pti_unwire_pte(void *pte, vm_offset_t va) pd_entry_t *pde; VM_OBJECT_ASSERT_WLOCKED(pti_obj); - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pte)); + m = DMAP_TO_VM_PAGE(pte); if (pmap_pti_free_page(m)) { pde = pmap_pti_pde(va); MPASS((*pde & (X86_PG_PS | X86_PG_V)) == X86_PG_V); @@ -12343,8 +12343,8 @@ DB_SHOW_COMMAND(ptpages, pmap_ptpages) ptpages_show_pml4(pg, NPML4EPG, PG_V); } } else { - ptpages_show_pml4(PHYS_TO_VM_PAGE(DMAP_TO_PHYS( - pmap->pm_pmltop)), NUP4ML4E, PG_V); + ptpages_show_pml4(DMAP_TO_VM_PAGE(pmap->pm_pmltop), NUP4ML4E, + PG_V); } } #endif diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 4e216ea01ab5..a0f8bbb4bed0 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -3459,7 +3459,7 @@ reclaim_pv_chunk_domain(pmap_t locked_pmap, struct rwlock **lockp, int domain) PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* Entire chunk is free; return it. */ - m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m_pc = DMAP_TO_VM_PAGE(pc); dump_drop_page(m_pc->phys_addr); mtx_lock(&pvc->pvc_lock); TAILQ_REMOVE(&pvc->pvc_list, pc, pc_lru); @@ -3561,7 +3561,7 @@ free_pv_chunk_dequeued(struct pv_chunk *pc) PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* entire chunk is free, return it */ - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m = DMAP_TO_VM_PAGE(pc); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); vm_page_free(m); diff --git a/sys/compat/linuxkpi/common/src/linux_page.c b/sys/compat/linuxkpi/common/src/linux_page.c index 39edb34545b7..b91115a5ff16 100644 --- a/sys/compat/linuxkpi/common/src/linux_page.c +++ b/sys/compat/linuxkpi/common/src/linux_page.c @@ -241,7 +241,7 @@ linux_free_kmem(vm_offset_t addr, unsigned int order) } else { vm_page_t page; - page = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(addr)); + page = DMAP_TO_VM_PAGE(addr); linux_free_pages(page, order); } } diff --git a/sys/kern/uipc_ktls.c b/sys/kern/uipc_ktls.c index 5e8bf3ba8a5d..41b18b29929b 100644 --- a/sys/kern/uipc_ktls.c +++ b/sys/kern/uipc_ktls.c @@ -461,7 +461,7 @@ ktls_buffer_release(void *arg __unused, void **store, int count) int i, j; for (i = 0; i < count; i++) { - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(store[i])); + m = DMAP_TO_VM_PAGE(store[i]); for (j = 0; j < atop(ktls_maxlen); j++) { (void)vm_page_unwire_noq(m + j); vm_page_free(m + j); diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c index 63159107d856..dd3cb5128fd2 100644 --- a/sys/powerpc/aim/mmu_radix.c +++ b/sys/powerpc/aim/mmu_radix.c @@ -1497,7 +1497,7 @@ reclaim_pv_chunk(pmap_t locked_pmap, struct rwlock **lockp) PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* Entire chunk is free; return it. */ - m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m_pc = DMAP_TO_VM_PAGE(pc); dump_drop_page(m_pc->phys_addr); mtx_lock(&pv_chunks_mutex); TAILQ_REMOVE(&pv_chunks, pc, pc_lru); @@ -1587,7 +1587,7 @@ free_pv_chunk(struct pv_chunk *pc) PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* entire chunk is free, return it */ - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m = DMAP_TO_VM_PAGE(pc); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); vm_page_free(m); @@ -3649,7 +3649,7 @@ radix_pgd_release(void *arg __unused, void **store, int count) * XXX selectively remove dmap and KVA entries so we don't * need to bzero */ - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(store[i])); + m = DMAP_TO_VM_PAGE(store[i]); for (int j = page_count-1; j >= 0; j--) { vm_page_unwire_noq(&m[j]); SLIST_INSERT_HEAD(&free, &m[j], plinks.s.ss); diff --git a/sys/powerpc/booke/pmap_64.c b/sys/powerpc/booke/pmap_64.c index 6e08103f315c..08449b9407ae 100644 --- a/sys/powerpc/booke/pmap_64.c +++ b/sys/powerpc/booke/pmap_64.c @@ -275,7 +275,7 @@ get_pgtbl_page(pmap_t pmap, void **ptr_tbl, uint32_t index, } return (page); } - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(page)); + m = DMAP_TO_VM_PAGE(page); page = ptr_tbl[index]; vm_page_unwire_noq(m); vm_page_free_zero(m); @@ -339,19 +339,19 @@ ptbl_unhold(pmap_t pmap, vm_offset_t va) ptbl = pdir[pdir_idx]; /* decrement hold count */ - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(ptbl)); + m = DMAP_TO_VM_PAGE(ptbl); if (!unhold_free_page(pmap, m)) return (0); pdir[pdir_idx] = NULL; - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pdir)); + m = DMAP_TO_VM_PAGE(pdir); if (!unhold_free_page(pmap, m)) return (1); pdir_l1[pdir_l1_idx] = NULL; - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pdir_l1)); + m = DMAP_TO_VM_PAGE(pdir_l1); if (!unhold_free_page(pmap, m)) return (1); @@ -372,7 +372,7 @@ ptbl_hold(pmap_t pmap, pte_t *ptbl) KASSERT((pmap != kernel_pmap), ("ptbl_hold: holding kernel ptbl!")); - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(ptbl)); + m = DMAP_TO_VM_PAGE(ptbl); m->ref_count++; } diff --git a/sys/powerpc/powerpc/uma_machdep.c b/sys/powerpc/powerpc/uma_machdep.c index f5e3b8b3356d..637690b52695 100644 --- a/sys/powerpc/powerpc/uma_machdep.c +++ b/sys/powerpc/powerpc/uma_machdep.c @@ -80,7 +80,7 @@ uma_small_free(void *mem, vm_size_t size, u_int8_t flags) vm_page_t m; if (hw_direct_map) - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(mem)); + m = DMAP_TO_VM_PAGE(mem); else { m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)mem)); pmap_kremove((vm_offset_t)mem); diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c index a49265250850..0cac747334a9 100644 --- a/sys/riscv/riscv/pmap.c +++ b/sys/riscv/riscv/pmap.c @@ -1924,7 +1924,7 @@ pmap_release(pmap_t pmap) finish: npages = pmap->pm_stage == PM_STAGE2 ? 4 : 1; - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pmap->pm_top)); + m = DMAP_TO_VM_PAGE(pmap->pm_top); for (i = 0; i < npages; i++) { vm_page_unwire_noq(m); vm_page_free(m); @@ -2132,7 +2132,7 @@ free_pv_chunk(struct pv_chunk *pc) PV_STAT(atomic_subtract_int(&pc_chunk_count, 1)); PV_STAT(atomic_add_int(&pc_chunk_frees, 1)); /* entire chunk is free, return it */ - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS(pc)); + m = DMAP_TO_VM_PAGE(pc); dump_drop_page(m->phys_addr); vm_page_unwire_noq(m); vm_page_free(m); diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index a091310ffd17..d0c1027a5f40 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -461,6 +461,8 @@ extern long first_page; /* first physical page number */ */ vm_page_t PHYS_TO_VM_PAGE(vm_paddr_t pa); +#define DMAP_TO_VM_PAGE(va) PHYS_TO_VM_PAGE(DMAP_TO_PHYS(va)) + /* * vm_page allocation arguments for the functions vm_page_alloc(), * vm_page_alloc_contig(), vm_page_alloc_noobj(), vm_page_grab(), and