aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2023-04-28 10:54:19 +0000
committerAndrew Turner <andrew@FreeBSD.org>2023-09-25 08:41:16 +0000
commite19bdeccc89a76727ddb56c9c2dbfc66daf9003a (patch)
tree7fb9fe9b846448a8d63e0f66ab4060d9a3852d2f
parent2a88ca31330c24cdb364218c5e0404b8878fa9f5 (diff)
downloadsrc-e19bdeccc89a76727ddb56c9c2dbfc66daf9003a.tar.gz
src-e19bdeccc89a76727ddb56c9c2dbfc66daf9003a.zip
Split out pmap_map_delete on arm64
This will be used when supporting some extensions, e.g. Branch Target Identification (BTI). Sponsored by: Arm Ltd (cherry picked from commit 020edaea2ab05c9cea7d83872f28a4e5e65407e2)
-rw-r--r--sys/arm64/arm64/pmap.c12
-rw-r--r--sys/arm64/include/pmap.h2
2 files changed, 13 insertions, 1 deletions
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index edd34bcd5e68..037f1d5a805f 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -3295,6 +3295,18 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
}
/*
+ * Remove the given range of addresses as part of a logical unmap
+ * operation. This has the effect of calling pmap_remove(), but
+ * also clears any metadata that should persist for the lifetime
+ * of a logical mapping.
+ */
+void
+pmap_map_delete(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
+{
+ pmap_remove(pmap, sva, eva);
+}
+
+/*
* Routine: pmap_remove_all
* Function:
* Removes this physical page from
diff --git a/sys/arm64/include/pmap.h b/sys/arm64/include/pmap.h
index 95e43eada9cc..7305b8d32e87 100644
--- a/sys/arm64/include/pmap.h
+++ b/sys/arm64/include/pmap.h
@@ -177,7 +177,7 @@ int pmap_pinit_stage(pmap_t, enum pmap_stage, int);
bool pmap_ps_enabled(pmap_t pmap);
uint64_t pmap_to_ttbr0(pmap_t pmap);
void pmap_disable_promotion(vm_offset_t sva, vm_size_t size);
-#define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva)
+void pmap_map_delete(pmap_t, vm_offset_t, vm_offset_t);
void *pmap_mapdev(vm_offset_t, vm_size_t);
void *pmap_mapbios(vm_paddr_t, vm_size_t);