Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Apr 2026 18:16:10 +0000
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: dfb804eb57f1 - main - pmap_change_attr: Use void * instead of vm_offset_t
Message-ID:  <69ea61ea.46508.251b04e9@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=dfb804eb57f1e50f5c84060007e3b1e9c1edf253

commit dfb804eb57f1e50f5c84060007e3b1e9c1edf253
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2026-04-23 17:05:53 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2026-04-23 17:05:53 +0000

    pmap_change_attr: Use void * instead of vm_offset_t
    
    Effort:         CHERI upstreaming
    Reviewed by:    kib
    Sponsored by:   AFRL, DARPA
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/2068
---
 sys/amd64/amd64/pmap.c                             | 10 ++++-----
 sys/amd64/include/pmap.h                           |  2 +-
 sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c    |  3 +--
 sys/arm64/arm64/pmap.c                             |  7 ++++---
 sys/arm64/include/pmap.h                           |  2 +-
 .../linuxkpi/common/include/asm/set_memory.h       |  6 +++---
 sys/compat/linuxkpi/common/include/linux/io.h      |  4 ++--
 sys/compat/x86bios/x86bios.c                       |  2 +-
 sys/dev/agp/agp_i810.c                             |  2 +-
 sys/dev/cxgbe/t4_main.c                            |  2 +-
 sys/dev/ena/ena.c                                  |  4 ++--
 sys/dev/mxge/if_mxge.c                             |  2 +-
 sys/dev/ntb/ntb_hw/ntb_hw_amd.c                    |  2 +-
 sys/dev/ntb/ntb_hw/ntb_hw_intel.c                  |  4 ++--
 sys/dev/ntb/ntb_hw/ntb_hw_plx.c                    |  2 +-
 sys/i386/i386/pmap.c                               |  5 +++--
 sys/i386/i386/pmap_base.c                          |  2 +-
 sys/i386/include/pmap.h                            |  2 +-
 sys/i386/include/pmap_base.h                       |  2 +-
 sys/powerpc/aim/mmu_radix.c                        | 24 +++++++++++-----------
 sys/powerpc/booke/pmap.c                           |  7 ++++---
 sys/powerpc/include/mmuvar.h                       |  2 +-
 sys/powerpc/include/pmap.h                         |  2 +-
 sys/powerpc/powerpc/pmap_dispatch.c                |  2 +-
 sys/riscv/include/pmap.h                           |  2 +-
 sys/riscv/riscv/pmap.c                             | 17 +++++++--------
 26 files changed, 62 insertions(+), 59 deletions(-)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 361f3d619122..6a04088ec479 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -2612,7 +2612,7 @@ pmap_init(void)
 			continue;
 		/* Make the direct map consistent */
 		if (ppim->pa < dmaplimit && ppim->pa + ppim->sz <= dmaplimit) {
-			(void)pmap_change_attr(PHYS_TO_DMAP(ppim->pa),
+			(void)pmap_change_attr((void *)PHYS_TO_DMAP(ppim->pa),
 			    ppim->sz, ppim->mode);
 		}
 		if (!bootverbose)
@@ -9609,7 +9609,7 @@ pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
 	 * required for data coherence.
 	 */
 	if ((m->flags & PG_FICTITIOUS) == 0 &&
-	    pmap_change_attr(PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), PAGE_SIZE,
+	    pmap_change_attr((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), PAGE_SIZE,
 	    m->md.pat_mode))
 		panic("memory attribute change on the direct map failed");
 }
@@ -9654,12 +9654,12 @@ pmap_page_set_memattr_noflush(vm_page_t m, vm_memattr_t ma)
  * virtual address range or the direct map.
  */
 int
-pmap_change_attr(vm_offset_t va, vm_size_t size, int mode)
+pmap_change_attr(void *va, vm_size_t size, int mode)
 {
 	int error;
 
 	PMAP_LOCK(kernel_pmap);
-	error = pmap_change_props_locked(va, size, PROT_NONE, mode,
+	error = pmap_change_props_locked((vm_offset_t)va, size, PROT_NONE, mode,
 	    MAPDEV_FLUSHCACHE);
 	PMAP_UNLOCK(kernel_pmap);
 	return (error);
@@ -10777,7 +10777,7 @@ pmap_large_map(vm_paddr_t spa, vm_size_t len, void **addr,
 	if (spa + len <= dmaplimit) {
 		va = PHYS_TO_DMAP(spa);
 		*addr = (void *)va;
-		return (pmap_change_attr(va, len, mattr));
+		return (pmap_change_attr((void *)va, len, mattr));
 	}
 
 	/*
diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h
index e2f97442c10f..69366588fec8 100644
--- a/sys/amd64/include/pmap.h
+++ b/sys/amd64/include/pmap.h
@@ -392,7 +392,7 @@ void	pmap_activate_sw(struct thread *);
 void	pmap_allow_2m_x_ept_recalculate(void);
 void	pmap_bootstrap(vm_paddr_t *);
 int	pmap_cache_bits(pmap_t pmap, int mode, bool is_pde);
-int	pmap_change_attr(vm_offset_t, vm_size_t, int);
+int	pmap_change_attr(void *, vm_size_t, int);
 int	pmap_change_prot(vm_offset_t, vm_size_t, vm_prot_t);
 void	pmap_demote_DMAP(vm_paddr_t base, vm_size_t len, bool invalidate);
 void	pmap_flush_cache_range(vm_offset_t, vm_offset_t);
diff --git a/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c b/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c
index 797896a7f22b..8974a961daf4 100644
--- a/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c
+++ b/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c
@@ -275,8 +275,7 @@ rpi_virt_gpio_attach(device_t dev)
 	}
 	sc->paddr = vtophys(sc->vaddr);
 	/* Mark it uncacheable. */
-	pmap_change_attr((vm_offset_t)sc->vaddr, PAGE_SIZE,
-	    VM_MEMATTR_UNCACHEABLE);
+	pmap_change_attr(sc->vaddr, PAGE_SIZE, VM_MEMATTR_UNCACHEABLE);
 
 	if (bootverbose)
 		device_printf(dev,
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index cc43f4d21278..285fa158ecd5 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -8193,7 +8193,7 @@ pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
 	 * required for data coherence.
 	 */
 	if ((m->flags & PG_FICTITIOUS) == 0 &&
-	    pmap_change_attr(PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), PAGE_SIZE,
+	    pmap_change_attr((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), PAGE_SIZE,
 	    m->md.pv_memattr) != 0)
 		panic("memory attribute change on the direct map failed");
 }
@@ -8218,12 +8218,13 @@ pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
  * virtual address range or the direct map.
  */
 int
-pmap_change_attr(vm_offset_t va, vm_size_t size, int mode)
+pmap_change_attr(void *va, vm_size_t size, int mode)
 {
 	int error;
 
 	PMAP_LOCK(kernel_pmap);
-	error = pmap_change_props_locked(va, size, PROT_NONE, mode, false);
+	error = pmap_change_props_locked((vm_offset_t)va, size, PROT_NONE, mode,
+	    false);
 	PMAP_UNLOCK(kernel_pmap);
 	return (error);
 }
diff --git a/sys/arm64/include/pmap.h b/sys/arm64/include/pmap.h
index f5812893fcfa..c984ac46226c 100644
--- a/sys/arm64/include/pmap.h
+++ b/sys/arm64/include/pmap.h
@@ -144,7 +144,7 @@ extern pt_entry_t pmap_sh_attr;
 void	pmap_activate_vm(pmap_t);
 void	pmap_bootstrap_dmap(vm_size_t);
 void	pmap_bootstrap(void);
-int	pmap_change_attr(vm_offset_t va, vm_size_t size, int mode);
+int	pmap_change_attr(void *va, vm_size_t size, int mode);
 int	pmap_change_prot(vm_offset_t va, vm_size_t size, vm_prot_t prot);
 void	pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode);
 void	pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t);
diff --git a/sys/compat/linuxkpi/common/include/asm/set_memory.h b/sys/compat/linuxkpi/common/include/asm/set_memory.h
index 1019aaf264a0..f328fcabd243 100644
--- a/sys/compat/linuxkpi/common/include/asm/set_memory.h
+++ b/sys/compat/linuxkpi/common/include/asm/set_memory.h
@@ -37,7 +37,7 @@ set_memory_uc(unsigned long addr, int numpages)
 	vm_size_t len;
 
 	len = (vm_size_t)numpages << PAGE_SHIFT;
-	return (-pmap_change_attr(addr, len, VM_MEMATTR_UNCACHEABLE));
+	return (-pmap_change_attr((void *)addr, len, VM_MEMATTR_UNCACHEABLE));
 }
 
 static inline int
@@ -47,7 +47,7 @@ set_memory_wc(unsigned long addr, int numpages)
 	vm_size_t len;
 
 	len = (vm_size_t)numpages << PAGE_SHIFT;
-	return (-pmap_change_attr(addr, len, VM_MEMATTR_WRITE_COMBINING));
+	return (-pmap_change_attr((void *)addr, len, VM_MEMATTR_WRITE_COMBINING));
 #else
 	return (set_memory_uc(addr, numpages));
 #endif
@@ -59,7 +59,7 @@ set_memory_wb(unsigned long addr, int numpages)
 	vm_size_t len;
 
 	len = (vm_size_t)numpages << PAGE_SHIFT;
-	return (-pmap_change_attr(addr, len, VM_MEMATTR_WRITE_BACK));
+	return (-pmap_change_attr((void *)addr, len, VM_MEMATTR_WRITE_BACK));
 }
 
 static inline int
diff --git a/sys/compat/linuxkpi/common/include/linux/io.h b/sys/compat/linuxkpi/common/include/linux/io.h
index 2d6fef4e7c52..01ea282aa914 100644
--- a/sys/compat/linuxkpi/common/include/linux/io.h
+++ b/sys/compat/linuxkpi/common/include/linux/io.h
@@ -545,7 +545,7 @@ arch_io_reserve_memtype_wc(resource_size_t start, resource_size_t size)
 	vm_offset_t va;
 
 	va = PHYS_TO_DMAP(start);
-	return (-pmap_change_attr(va, size, VM_MEMATTR_WRITE_COMBINING));
+	return (-pmap_change_attr((void *)va, size, VM_MEMATTR_WRITE_COMBINING));
 #else
 	return (0);
 #endif
@@ -559,7 +559,7 @@ arch_io_free_memtype_wc(resource_size_t start, resource_size_t size)
 
 	va = PHYS_TO_DMAP(start);
 
-	pmap_change_attr(va, size, VM_MEMATTR_WRITE_BACK);
+	pmap_change_attr((void *)va, size, VM_MEMATTR_WRITE_BACK);
 #endif
 }
 
diff --git a/sys/compat/x86bios/x86bios.c b/sys/compat/x86bios/x86bios.c
index 41b72080177c..29b0f7a91f74 100644
--- a/sys/compat/x86bios/x86bios.c
+++ b/sys/compat/x86bios/x86bios.c
@@ -707,7 +707,7 @@ x86bios_map_mem(void)
 #ifdef X86BIOS_NATIVE_ARCH
 	/* Change attribute for EBDA. */
 	if (x86bios_rom_phys < X86BIOS_ROM_BASE &&
-	    pmap_change_attr((vm_offset_t)x86bios_rom,
+	    pmap_change_attr(x86bios_rom,
 	    X86BIOS_ROM_BASE - x86bios_rom_phys, PAT_WRITE_BACK) != 0)
 		goto fail;
 #endif
diff --git a/sys/dev/agp/agp_i810.c b/sys/dev/agp/agp_i810.c
index fa98d6f56a3a..fc27041d2e41 100644
--- a/sys/dev/agp/agp_i810.c
+++ b/sys/dev/agp/agp_i810.c
@@ -1234,7 +1234,7 @@ agp_gen4_install_gatt(device_t dev, const vm_size_t gtt_offset)
 	struct agp_i810_softc *sc;
 
 	sc = device_get_softc(dev);
-	pmap_change_attr((vm_offset_t)rman_get_virtual(sc->sc_res[0]) +
+	pmap_change_attr((char *)rman_get_virtual(sc->sc_res[0]) +
 	    gtt_offset, rman_get_size(sc->sc_res[0]) - gtt_offset,
 	    VM_MEMATTR_WRITE_COMBINING);
 	agp_i830_install_gatt_init(sc);
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index 40cc7777bd71..69ecfce1dade 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -4047,7 +4047,7 @@ t4_map_bar_2(struct adapter *sc)
 			 * request with an implicit doorbell.
 			 */
 
-			rc = pmap_change_attr((vm_offset_t)sc->udbs_base,
+			rc = pmap_change_attr(__DEVOLATILE(void *, sc->udbs_base),
 			    rman_get_size(sc->udbs_res), PAT_WRITE_COMBINING);
 			if (rc == 0) {
 				clrbit(&sc->doorbells, DOORBELL_UDB);
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
index eddb7dbd42e8..6972c71bd67c 100644
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -2671,11 +2671,11 @@ static int
 ena_enable_wc(device_t pdev, struct resource *res)
 {
 #if defined(__i386) || defined(__amd64) || defined(__aarch64__)
-	vm_offset_t va;
+	void *va;
 	vm_size_t len;
 	int rc;
 
-	va = (vm_offset_t)rman_get_virtual(res);
+	va = rman_get_virtual(res);
 	len = rman_get_size(res);
 	/* Enable write combining */
 	rc = pmap_change_attr(va, len, VM_MEMATTR_WRITE_COMBINING);
diff --git a/sys/dev/mxge/if_mxge.c b/sys/dev/mxge/if_mxge.c
index ca2267098c4f..04f535e5f7c9 100644
--- a/sys/dev/mxge/if_mxge.c
+++ b/sys/dev/mxge/if_mxge.c
@@ -183,7 +183,7 @@ mxge_enable_wc(mxge_softc_t *sc)
 
 	sc->wc = 1;
 	len = rman_get_size(sc->mem_res);
-	err = pmap_change_attr((vm_offset_t) sc->sram,
+	err = pmap_change_attr(__DEVOLATILE(void *, sc->sram),
 			       len, PAT_WRITE_COMBINING);
 	if (err != 0) {
 		device_printf(sc->dev, "pmap_change_attr failed, %d\n",
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw_amd.c b/sys/dev/ntb/ntb_hw/ntb_hw_amd.c
index fc3c6559d76a..24a507c47a57 100644
--- a/sys/dev/ntb/ntb_hw/ntb_hw_amd.c
+++ b/sys/dev/ntb/ntb_hw/ntb_hw_amd.c
@@ -465,7 +465,7 @@ amd_ntb_mw_set_wc(device_t dev, unsigned int mw_idx, vm_memattr_t mode)
 	if (mode == bar_info->map_mode)
 		return (0);
 
-	rc = pmap_change_attr((vm_offset_t)bar_info->vbase, bar_info->size, mode);
+	rc = pmap_change_attr(bar_info->vbase, bar_info->size, mode);
 	if (rc == 0)
 		bar_info->map_mode = mode;
 
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw_intel.c b/sys/dev/ntb/ntb_hw/ntb_hw_intel.c
index d4852917085d..aa6c36e9c46e 100644
--- a/sys/dev/ntb/ntb_hw/ntb_hw_intel.c
+++ b/sys/dev/ntb/ntb_hw/ntb_hw_intel.c
@@ -1056,7 +1056,7 @@ map_memory_window_bar(struct ntb_softc *ntb, struct ntb_pci_bar_info *bar)
 	if (mapmode == bar->map_mode)
 		return (0);
 
-	rc = pmap_change_attr((vm_offset_t)bar->vbase, bar->size, mapmode);
+	rc = pmap_change_attr(bar->vbase, bar->size, mapmode);
 	if (rc == 0) {
 		bar->map_mode = mapmode;
 		device_printf(ntb->device,
@@ -3730,7 +3730,7 @@ intel_ntb_mw_set_wc_internal(struct ntb_softc *ntb, unsigned idx, vm_memattr_t m
 	if (bar->map_mode == mode)
 		return (0);
 
-	rc = pmap_change_attr((vm_offset_t)bar->vbase, bar->size, mode);
+	rc = pmap_change_attr(bar->vbase, bar->size, mode);
 	if (rc == 0)
 		bar->map_mode = mode;
 
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw_plx.c b/sys/dev/ntb/ntb_hw/ntb_hw_plx.c
index 906660116067..01b5186bb7d1 100644
--- a/sys/dev/ntb/ntb_hw/ntb_hw_plx.c
+++ b/sys/dev/ntb/ntb_hw/ntb_hw_plx.c
@@ -860,7 +860,7 @@ ntb_plx_mw_set_wc(device_t dev, unsigned mw_idx, vm_memattr_t mode)
 
 	split = (mw->mw_bar == 2) ? sc->split : 0;
 	ss = (mw->mw_size - off) >> split;
-	rc = pmap_change_attr((vm_offset_t)mw->mw_vbase + off + ss * sp,
+	rc = pmap_change_attr(mw->mw_vbase + off + ss * sp,
 	    ss, mode);
 	if (rc == 0)
 		mw->splits[sp].mw_map_mode = mode;
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index dc31d3702531..fcc6160bac3d 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -5708,14 +5708,15 @@ __CONCAT(PMTYPE, flush_page)(vm_page_t m)
  * there was insufficient memory available to complete the change.
  */
 static int
-__CONCAT(PMTYPE, change_attr)(vm_offset_t va, vm_size_t size, int mode)
+__CONCAT(PMTYPE, change_attr)(void *addr, vm_size_t size, int mode)
 {
-	vm_offset_t base, offset, tmpva;
+	vm_offset_t base, offset, tmpva, va;
 	pd_entry_t *pde;
 	pt_entry_t *pte;
 	int cache_bits_pte, cache_bits_pde;
 	bool changed;
 
+	va = (vm_offset_t)addr;
 	base = trunc_page(va);
 	offset = va & PAGE_MASK;
 	size = round_page(offset + size);
diff --git a/sys/i386/i386/pmap_base.c b/sys/i386/i386/pmap_base.c
index ed084947cece..cfa2faa304fd 100644
--- a/sys/i386/i386/pmap_base.c
+++ b/sys/i386/i386/pmap_base.c
@@ -627,7 +627,7 @@ pmap_clear_modify(vm_page_t m)
 }
 
 int
-pmap_change_attr(vm_offset_t va, vm_size_t size, int mode)
+pmap_change_attr(void *va, vm_size_t size, int mode)
 {
 
 	return (pmap_methods_ptr->pm_change_attr(va, size, mode));
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h
index 04bde4daf48e..3c0e15dea6a2 100644
--- a/sys/i386/include/pmap.h
+++ b/sys/i386/include/pmap.h
@@ -219,7 +219,7 @@ void	*pmap_bios16_enter(void);
 void	pmap_bios16_leave(void *handle);
 void	pmap_bootstrap(vm_paddr_t);
 int	pmap_cache_bits(pmap_t, int mode, bool is_pde);
-int	pmap_change_attr(vm_offset_t, vm_size_t, int);
+int	pmap_change_attr(void *, vm_size_t, int);
 caddr_t	pmap_cmap3(vm_paddr_t pa, u_int pte_bits);
 void	pmap_cp_slow0_map(vm_offset_t kaddr, int plen, vm_page_t *ma);
 void	pmap_flush_page(vm_page_t m);
diff --git a/sys/i386/include/pmap_base.h b/sys/i386/include/pmap_base.h
index 9771361d674e..a82d8712fbb6 100644
--- a/sys/i386/include/pmap_base.h
+++ b/sys/i386/include/pmap_base.h
@@ -67,7 +67,7 @@ struct pmap_methods {
 	void (*pm_activate_boot)(pmap_t);
 	void (*pm_advise)(pmap_t, vm_offset_t, vm_offset_t, int);
 	void (*pm_clear_modify)(vm_page_t);
-	int (*pm_change_attr)(vm_offset_t, vm_size_t, int);
+	int (*pm_change_attr)(void *, vm_size_t, int);
 	int (*pm_mincore)(pmap_t, vm_offset_t, vm_paddr_t *);
 	void (*pm_copy)(pmap_t, pmap_t, vm_offset_t, vm_size_t, vm_offset_t);
 	void (*pm_copy_page)(vm_page_t, vm_page_t);
diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
index eaf9b39dde8f..214878c08669 100644
--- a/sys/powerpc/aim/mmu_radix.c
+++ b/sys/powerpc/aim/mmu_radix.c
@@ -466,7 +466,7 @@ void mmu_radix_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz);
 void mmu_radix_unwire(pmap_t, vm_offset_t, vm_offset_t);
 void mmu_radix_zero_page(vm_page_t);
 void mmu_radix_zero_page_area(vm_page_t, int, int);
-int mmu_radix_change_attr(vm_offset_t, vm_size_t, vm_memattr_t);
+int mmu_radix_change_attr(void *, vm_size_t, vm_memattr_t);
 void mmu_radix_page_array_startup(long pages);
 
 #include "mmu_oea64.h"
@@ -606,7 +606,7 @@ static bool pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m, struct spg
 
 static void pmap_invalidate_page(pmap_t pmap, vm_offset_t start);
 static void pmap_invalidate_all(pmap_t pmap);
-static int pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush);
+static int pmap_change_attr_locked(void *va, vm_size_t size, int mode, bool flush);
 static void pmap_fill_ptp(pt_entry_t *firstpte, pt_entry_t newpte);
 
 /*
@@ -5948,7 +5948,7 @@ mmu_radix_page_set_memattr(vm_page_t m, vm_memattr_t ma)
 	 * required for data coherence.
 	 */
 	if ((m->flags & PG_FICTITIOUS) == 0 &&
-	    mmu_radix_change_attr(PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)),
+	    mmu_radix_change_attr((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)),
 	    PAGE_SIZE, m->md.mdpg_cache_attrs))
 		panic("memory attribute change on the direct map failed");
 }
@@ -6202,12 +6202,11 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva)
 }
 
 int
-mmu_radix_change_attr(vm_offset_t va, vm_size_t size,
-    vm_memattr_t mode)
+mmu_radix_change_attr(void *va, vm_size_t size, vm_memattr_t mode)
 {
 	int error;
 
-	CTR4(KTR_PMAP, "%s(%#x, %#zx, %d)", __func__, va, size, mode);
+	CTR4(KTR_PMAP, "%s(%p, %#zx, %d)", __func__, va, size, mode);
 	PMAP_LOCK(kernel_pmap);
 	error = pmap_change_attr_locked(va, size, mode, true);
 	PMAP_UNLOCK(kernel_pmap);
@@ -6215,9 +6214,9 @@ mmu_radix_change_attr(vm_offset_t va, vm_size_t size,
 }
 
 static int
-pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
+pmap_change_attr_locked(void *addr, vm_size_t size, int mode, bool flush)
 {
-	vm_offset_t base, offset, tmpva;
+	vm_offset_t base, offset, tmpva, va;
 	vm_paddr_t pa_start, pa_end, pa_end1;
 	pml2_entry_t *l2e;
 	pml3_entry_t *l3e;
@@ -6226,6 +6225,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
 	bool changed;
 
 	PMAP_LOCK_ASSERT(kernel_pmap, MA_OWNED);
+	va = (vm_offset_t)addr;
 	base = trunc_page(va);
 	offset = va & PAGE_MASK;
 	size = round_page(offset + size);
@@ -6332,7 +6332,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
 				else {
 					/* Run ended, update direct map. */
 					error = pmap_change_attr_locked(
-					    PHYS_TO_DMAP(pa_start),
+					    (void *)PHYS_TO_DMAP(pa_start),
 					    pa_end - pa_start, mode, flush);
 					if (error != 0)
 						break;
@@ -6362,7 +6362,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
 				else {
 					/* Run ended, update direct map. */
 					error = pmap_change_attr_locked(
-					    PHYS_TO_DMAP(pa_start),
+					    (void *)PHYS_TO_DMAP(pa_start),
 					    pa_end - pa_start, mode, flush);
 					if (error != 0)
 						break;
@@ -6390,7 +6390,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
 				else {
 					/* Run ended, update direct map. */
 					error = pmap_change_attr_locked(
-					    PHYS_TO_DMAP(pa_start),
+					    (void *)PHYS_TO_DMAP(pa_start),
 					    pa_end - pa_start, mode, flush);
 					if (error != 0)
 						break;
@@ -6405,7 +6405,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
 	if (error == 0 && pa_start != pa_end && pa_start < dmaplimit) {
 		pa_end1 = MIN(pa_end, dmaplimit);
 		if (pa_start != pa_end1)
-			error = pmap_change_attr_locked(PHYS_TO_DMAP(pa_start),
+			error = pmap_change_attr_locked((void *)PHYS_TO_DMAP(pa_start),
 			    pa_end1 - pa_start, mode, flush);
 	}
 
diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c
index fcc98df25b38..e7942a53ea63 100644
--- a/sys/powerpc/booke/pmap.c
+++ b/sys/powerpc/booke/pmap.c
@@ -349,7 +349,7 @@ static void		mmu_booke_dumpsys_unmap(vm_paddr_t pa, size_t,
 static void		mmu_booke_scan_init(void);
 static void		*mmu_booke_quick_enter_page(vm_page_t m);
 static void		mmu_booke_quick_remove_page(void *addr);
-static int		mmu_booke_change_attr(vm_offset_t addr,
+static int		mmu_booke_change_attr(void *addr,
     vm_size_t sz, vm_memattr_t mode);
 static int		mmu_booke_decode_kernel_ptr(vm_offset_t addr,
     int *is_user, vm_offset_t *decoded_addr);
@@ -2372,13 +2372,14 @@ mmu_booke_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *pap)
 }
 
 static int
-mmu_booke_change_attr(vm_offset_t addr, vm_size_t sz, vm_memattr_t mode)
+mmu_booke_change_attr(void *sva, vm_size_t sz, vm_memattr_t mode)
 {
-	vm_offset_t va;
+	vm_offset_t addr, va;
 	pte_t *pte;
 	int i, j;
 	tlb_entry_t e;
 
+	addr = (vm_offset_t)sva;
 	addr = trunc_page(addr);
 
 	/* Only allow changes to mapped kernel addresses.  This includes:
diff --git a/sys/powerpc/include/mmuvar.h b/sys/powerpc/include/mmuvar.h
index d1e6f8f4b6d9..534a8f381107 100644
--- a/sys/powerpc/include/mmuvar.h
+++ b/sys/powerpc/include/mmuvar.h
@@ -38,7 +38,7 @@ typedef	void	*(*pmap_mapdev_t)(vm_paddr_t, vm_size_t);
 typedef	void	*(*pmap_mapdev_attr_t)(vm_paddr_t, vm_size_t, vm_memattr_t);
 typedef	void	(*pmap_unmapdev_t)(void *, vm_size_t);
 typedef	void	(*pmap_page_set_memattr_t)(vm_page_t, vm_memattr_t);
-typedef	int	(*pmap_change_attr_t)(vm_offset_t, vm_size_t, vm_memattr_t);
+typedef	int	(*pmap_change_attr_t)(void *, vm_size_t, vm_memattr_t);
 typedef	int	(*pmap_map_user_ptr_t)(pmap_t, volatile const void *,
  		    void **, size_t, size_t *);
 typedef	int	(*pmap_decode_kernel_ptr_t)(vm_offset_t, int *, vm_offset_t *);
diff --git a/sys/powerpc/include/pmap.h b/sys/powerpc/include/pmap.h
index df07858ff7e3..ff9be075d22d 100644
--- a/sys/powerpc/include/pmap.h
+++ b/sys/powerpc/include/pmap.h
@@ -310,7 +310,7 @@ void		*pmap_mapdev(vm_paddr_t, vm_size_t);
 void		*pmap_mapdev_attr(vm_paddr_t, vm_size_t, vm_memattr_t);
 void		pmap_unmapdev(void *, vm_size_t);
 void		pmap_page_set_memattr(vm_page_t, vm_memattr_t);
-int		pmap_change_attr(vm_offset_t, vm_size_t, vm_memattr_t);
+int		pmap_change_attr(void *, vm_size_t, vm_memattr_t);
 int		pmap_map_user_ptr(pmap_t pm, volatile const void *uaddr,
 		    void **kaddr, size_t ulen, size_t *klen);
 int		pmap_decode_kernel_ptr(vm_offset_t addr, int *is_user,
diff --git a/sys/powerpc/powerpc/pmap_dispatch.c b/sys/powerpc/powerpc/pmap_dispatch.c
index 676e0d4d4c78..96a07976d3da 100644
--- a/sys/powerpc/powerpc/pmap_dispatch.c
+++ b/sys/powerpc/powerpc/pmap_dispatch.c
@@ -185,7 +185,7 @@ DEFINE_PMAP_IFUNC(int, map_user_ptr,
 DEFINE_PMAP_IFUNC(int, decode_kernel_ptr, (vm_offset_t, int *, vm_offset_t *));
 DEFINE_PMAP_IFUNC(int, dev_direct_mapped, (vm_paddr_t, vm_size_t));
 DEFINE_PMAP_IFUNC(void, sync_icache, (pmap_t, vm_offset_t, vm_size_t));
-DEFINE_PMAP_IFUNC(int, change_attr, (vm_offset_t, vm_size_t, vm_memattr_t));
+DEFINE_PMAP_IFUNC(int, change_attr, (void *, vm_size_t, vm_memattr_t));
 DEFINE_PMAP_IFUNC(void, page_array_startup, (long));
 DEFINE_PMAP_IFUNC(void, tlbie_all, (void));
 
diff --git a/sys/riscv/include/pmap.h b/sys/riscv/include/pmap.h
index 74e15d965826..b7be1a0a262f 100644
--- a/sys/riscv/include/pmap.h
+++ b/sys/riscv/include/pmap.h
@@ -134,7 +134,7 @@ struct thread;
 void	pmap_activate_boot(pmap_t);
 void	pmap_activate_sw(struct thread *);
 void	pmap_bootstrap(vm_paddr_t, vm_size_t);
-int	pmap_change_attr(vm_offset_t va, vm_size_t size, int mode);
+int	pmap_change_attr(void *va, vm_size_t size, int mode);
 void	pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode);
 void	pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t);
 vm_paddr_t pmap_kextract(vm_offset_t va);
diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c
index dfa341bd4bd6..90493418c499 100644
--- a/sys/riscv/riscv/pmap.c
+++ b/sys/riscv/riscv/pmap.c
@@ -337,7 +337,7 @@ static void _pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m,
     struct spglist *free);
 static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t, struct spglist *);
 
-static int pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode);
+static int pmap_change_attr_locked(void *va, vm_size_t size, int mode);
 
 static uint64_t pmap_satp_mode(void);
 
@@ -4927,7 +4927,7 @@ pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
 	 * required for data coherence.
 	 */
 	if ((m->flags & PG_FICTITIOUS) == 0 &&
-	    pmap_change_attr(PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), PAGE_SIZE,
+	    pmap_change_attr((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), PAGE_SIZE,
 	    m->md.pv_memattr) != 0)
 		panic("memory attribute change on the direct map failed");
 }
@@ -4945,7 +4945,7 @@ pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
  * virtual address range.
  */
 int
-pmap_change_attr(vm_offset_t va, vm_size_t size, int mode)
+pmap_change_attr(void *va, vm_size_t size, int mode)
 {
 	int error;
 
@@ -4956,9 +4956,9 @@ pmap_change_attr(vm_offset_t va, vm_size_t size, int mode)
 }
 
 static int
-pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
+pmap_change_attr_locked(void *addr, vm_size_t size, int mode)
 {
-	vm_offset_t base, offset, tmpva;
+	vm_offset_t base, offset, tmpva, va;
 	vm_paddr_t phys;
 	pd_entry_t *l1, l1e;
 	pd_entry_t *l2, l2e;
@@ -4968,6 +4968,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
 	int error = 0;
 
 	PMAP_LOCK_ASSERT(kernel_pmap, MA_OWNED);
+	va = (vm_offset_t)addr;
 	base = trunc_page(va);
 	offset = va & PAGE_MASK;
 	size = round_page(offset + size);
@@ -5060,7 +5061,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
 			phys = L1PTE_TO_PHYS(l1e);
 			if (!VIRT_IN_DMAP(tmpva) && PHYS_IN_DMAP(phys)) {
 				error = pmap_change_attr_locked(
-				    PHYS_TO_DMAP(phys), L1_SIZE, mode);
+				    (void *)PHYS_TO_DMAP(phys), L1_SIZE, mode);
 				if (error != 0)
 					break;
 			}
@@ -5086,7 +5087,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
 			phys = L2PTE_TO_PHYS(l2e);
 			if (!VIRT_IN_DMAP(tmpva) && PHYS_IN_DMAP(phys)) {
 				error = pmap_change_attr_locked(
-				    PHYS_TO_DMAP(phys), L2_SIZE, mode);
+				    (void *)PHYS_TO_DMAP(phys), L2_SIZE, mode);
 				if (error != 0)
 					break;
 			}
@@ -5110,7 +5111,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
 
 		phys = PTE_TO_PHYS(l3e);
 		if (!VIRT_IN_DMAP(tmpva) && PHYS_IN_DMAP(phys)) {
-			error = pmap_change_attr_locked(PHYS_TO_DMAP(phys),
+			error = pmap_change_attr_locked((void *)PHYS_TO_DMAP(phys),
 			    L3_SIZE, mode);
 			if (error != 0)
 				break;


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ea61ea.46508.251b04e9>