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>
