git: 0aebcfc9f4d6 - main - arm64 pmap: Eliminate some duplication of code
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 23 Jul 2023 05:35:02 UTC
The branch main has been updated by alc: URL: https://cgit.FreeBSD.org/src/commit/?id=0aebcfc9f4d642a8bef95504dc928fab78af33bf commit 0aebcfc9f4d642a8bef95504dc928fab78af33bf Author: Alan Cox <alc@FreeBSD.org> AuthorDate: 2023-07-22 17:41:49 +0000 Commit: Alan Cox <alc@FreeBSD.org> CommitDate: 2023-07-23 05:34:17 +0000 arm64 pmap: Eliminate some duplication of code pmap_unmapbios() can simply call pmap_kremove_device() rather than duplicating its code. While I'm here, add a comment to pmap_kremove_device() explaining its proper use, and fix a whitespace issue. MFC after: 1 week --- sys/arm64/arm64/pmap.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index b2591437b3b3..dfed0142f273 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -2032,6 +2032,13 @@ pmap_kremove(vm_offset_t va) pmap_s1_invalidate_page(kernel_pmap, va, true); } +/* + * Remove the specified range of mappings from the kernel address space. + * + * Should only be applied to mappings that were created by pmap_kenter() or + * pmap_kenter_device(). Nothing about this function is actually specific + * to device mappings. + */ void pmap_kremove_device(vm_offset_t sva, vm_size_t size) { @@ -2039,7 +2046,7 @@ pmap_kremove_device(vm_offset_t sva, vm_size_t size) vm_offset_t va; KASSERT((sva & L3_OFFSET) == 0, - ("pmap_kremove_device: Invalid virtual address")); + ("pmap_kremove_device: Invalid virtual address")); KASSERT((size & PAGE_MASK) == 0, ("pmap_kremove_device: Mapping is not page-sized")); @@ -6550,7 +6557,7 @@ void pmap_unmapbios(void *p, vm_size_t size) { struct pmap_preinit_mapping *ppim; - vm_offset_t offset, tmpsize, va, va_trunc; + vm_offset_t offset, va, va_trunc; pd_entry_t *pde; pt_entry_t *l2; int i, lvl, l2_blocks, block; @@ -6600,14 +6607,8 @@ pmap_unmapbios(void *p, vm_size_t size) size = round_page(offset + size); va = trunc_page(va); - pde = pmap_pde(kernel_pmap, va, &lvl); - KASSERT(pde != NULL, - ("pmap_unmapbios: Invalid page entry, va: 0x%lx", va)); - KASSERT(lvl == 2, ("pmap_unmapbios: Invalid level %d", lvl)); - /* Unmap and invalidate the pages */ - for (tmpsize = 0; tmpsize < size; tmpsize += PAGE_SIZE) - pmap_kremove(va + tmpsize); + pmap_kremove_device(va, size); kva_free(va, size); }