Date: Thu, 15 May 2025 15:27:57 GMT From: Andrew Turner <andrew@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 68baf043e48b - main - arm: Make the pmap_kenter signature like arm64 Message-ID: <202505151527.54FFRvU5071447@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=68baf043e48bac021389f844516ea74ca2d8e115 commit 68baf043e48bac021389f844516ea74ca2d8e115 Author: Andrew Turner <andrew@FreeBSD.org> AuthorDate: 2025-05-15 14:50:14 +0000 Commit: Andrew Turner <andrew@FreeBSD.org> CommitDate: 2025-05-15 15:09:46 +0000 arm: Make the pmap_kenter signature like arm64 To support a common pmap_mapdev_attr change pmap_kenter to include the size any memory type in the signature. Reviewed by: mhorne Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D50307 --- sys/arm/arm/mem.c | 4 ++-- sys/arm/arm/pmap-v6.c | 43 +++++++++++++++++++++++-------------------- sys/arm/include/pmap.h | 2 +- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/sys/arm/arm/mem.c b/sys/arm/arm/mem.c index 7f149892ab9d..cec253f60b51 100644 --- a/sys/arm/arm/mem.c +++ b/sys/arm/arm/mem.c @@ -114,8 +114,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags) if (!address_valid) return (EINVAL); sx_xlock(&tmppt_lock); - pmap_kenter((vm_offset_t)_tmppt, v); - pmap_tlb_flush(kernel_pmap, (vm_offset_t)_tmppt); + pmap_kenter((vm_offset_t)_tmppt, PAGE_SIZE, v, + VM_MEMATTR_DEFAULT); o = (int)uio->uio_offset & PAGE_MASK; c = (u_int)(PAGE_SIZE - ((int)iov->iov_base & PAGE_MASK)); c = min(c, (u_int)(PAGE_SIZE - o)); diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c index fafa8908dcd1..a0e0b007ffaa 100644 --- a/sys/arm/arm/pmap-v6.c +++ b/sys/arm/arm/pmap-v6.c @@ -1150,7 +1150,7 @@ pmap_dump_kextract(vm_offset_t va, pt2_entry_t *pte2p) * After pmap_bootstrap() is called, the following functions for * mappings can be used: * - * void pmap_kenter(vm_offset_t va, vm_paddr_t pa); + * void pmap_kenter(vm_offset_t va, vm_size_t size, vm_paddr_t pa, int mode); * void pmap_kremove(vm_offset_t va); * vm_offset_t pmap_map(vm_offset_t *virt, vm_paddr_t start, vm_paddr_t end, * int prot); @@ -1308,11 +1308,28 @@ pmap_kenter_prot_attr(vm_offset_t va, vm_paddr_t pa, uint32_t prot, pte2_store(pte2p, PTE2_KERN(pa, prot, attr)); } -PMAP_INLINE void -pmap_kenter(vm_offset_t va, vm_paddr_t pa) +static __inline void +pmap_kenter_noflush(vm_offset_t va, vm_size_t size, vm_paddr_t pa, int mode) { + uint32_t l2attr; + + KASSERT((size & PAGE_MASK) == 0, + ("%s: device mapping not page-sized", __func__)); - pmap_kenter_prot_attr(va, pa, PTE2_AP_KRW, PTE2_ATTR_DEFAULT); + l2attr = vm_memattr_to_pte2(mode); + while (size != 0) { + pmap_kenter_prot_attr(va, pa, PTE2_AP_KRW, l2attr); + va += PAGE_SIZE; + pa += PAGE_SIZE; + size -= PAGE_SIZE; + } +} + +PMAP_INLINE void +pmap_kenter(vm_offset_t va, vm_size_t size, vm_paddr_t pa, int mode) +{ + pmap_kenter_noflush(va, size, pa, mode); + tlb_flush_range(va, size); } /* @@ -1453,7 +1470,7 @@ pmap_kenter_temporary(vm_paddr_t pa, int i) /* QQQ: 'i' should be less or equal to MAXDUMPPGS. */ va = (vm_offset_t)crashdumpmap + (i * PAGE_SIZE); - pmap_kenter(va, pa); + pmap_kenter_noflush(va, PAGE_SIZE, pa, VM_MEMATTR_DEFAULT); tlb_flush_local(va); return ((void *)crashdumpmap); } @@ -6253,21 +6270,7 @@ pmap_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *pap) void pmap_kenter_device(vm_offset_t va, vm_size_t size, vm_paddr_t pa) { - vm_offset_t sva; - uint32_t l2attr; - - KASSERT((size & PAGE_MASK) == 0, - ("%s: device mapping not page-sized", __func__)); - - sva = va; - l2attr = vm_memattr_to_pte2(VM_MEMATTR_DEVICE); - while (size != 0) { - pmap_kenter_prot_attr(va, pa, PTE2_AP_KRW, l2attr); - va += PAGE_SIZE; - pa += PAGE_SIZE; - size -= PAGE_SIZE; - } - tlb_flush_range(sva, va - sva); + pmap_kenter(va, size, pa, VM_MEMATTR_DEVICE); } void diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h index 671e2af52423..dcd4e0a83ab1 100644 --- a/sys/arm/include/pmap.h +++ b/sys/arm/include/pmap.h @@ -135,7 +135,7 @@ extern ttb_entry_t pmap_kern_ttb; /* TTB for kernel pmap */ * vtopte2(). */ void pmap_bootstrap(vm_offset_t); -void pmap_kenter(vm_offset_t, vm_paddr_t); +void pmap_kenter(vm_offset_t, vm_size_t, vm_paddr_t, int); void pmap_kremove(vm_offset_t); bool pmap_page_is_mapped(vm_page_t); bool pmap_ps_enabled(pmap_t pmap);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202505151527.54FFRvU5071447>