aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lepore <ian@FreeBSD.org>2017-12-20 22:17:27 +0000
committerIan Lepore <ian@FreeBSD.org>2017-12-20 22:17:27 +0000
commite3842da22f28b41d10913e5899ff9312d8cc0fe4 (patch)
tree9a9b04fb546256e9cdfa6fdd3f5c5d725301cbc4
parentdf1e0a51ec335f79ae983766c65dc0871e18be1b (diff)
downloadsrc-e3842da22f28b41d10913e5899ff9312d8cc0fe4.tar.gz
src-e3842da22f28b41d10913e5899ff9312d8cc0fe4.zip
Allow pmap_kremove() to remove 1MB section mappings as well as 4K pages.
This will allow it to undo temporary device mappings such as those made with pmap_preboot_map_attr(). Reviewed by: cognet
Notes
Notes: svn path=/head/; revision=327049
-rw-r--r--sys/arm/arm/pmap-v6.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
index 423c7dbba341..cc21d2f2c2ef 100644
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -1310,10 +1310,16 @@ pmap_kenter(vm_offset_t va, vm_paddr_t pa)
PMAP_INLINE void
pmap_kremove(vm_offset_t va)
{
+ pt1_entry_t *pte1p;
pt2_entry_t *pte2p;
- pte2p = pt2map_entry(va);
- pte2_clear(pte2p);
+ pte1p = kern_pte1(va);
+ if (pte1_is_section(pte1_load(pte1p))) {
+ pte1_clear(pte1p);
+ } else {
+ pte2p = pt2map_entry(va);
+ pte2_clear(pte2p);
+ }
}
/*