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);
}