summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2016-09-07 15:37:39 +0000
committerandrew <andrew@FreeBSD.org>2016-09-07 15:37:39 +0000
commit3e81af6d0fa89e6a077582948313b0bd2be2431f (patch)
tree3400a66995c9907bed742e11cff5fde311052dc9
parent39846b4beaf1727a44b2c98caf8748e4b1a0d7a4 (diff)
downloadFreeBSD-src-3e81af6d0fa89e6a077582948313b0bd2be2431f.zip
FreeBSD-src-3e81af6d0fa89e6a077582948313b0bd2be2431f.tar.gz
MFC 303585, 303587:
- Relax the barriers around a TLB invalidation - Fix the comment above pmap_invalidate_page Obtained from: ABT Systems Ltd Sponsored by: The FreeBSD Foundation
-rw-r--r--sys/arm64/arm64/pmap.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index fded6b7..de9fd40 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -856,8 +856,7 @@ pmap_init(void)
}
/*
- * Normal, non-SMP, invalidation functions.
- * We inline these within pmap.c for speed.
+ * Invalidate a single TLB entry.
*/
PMAP_INLINE void
pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
@@ -865,9 +864,9 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
sched_pin();
__asm __volatile(
- "dsb sy \n"
+ "dsb ishst \n"
"tlbi vaae1is, %0 \n"
- "dsb sy \n"
+ "dsb ish \n"
"isb \n"
: : "r"(va >> PAGE_SHIFT));
sched_unpin();
@@ -879,13 +878,13 @@ pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
vm_offset_t addr;
sched_pin();
- __asm __volatile("dsb sy");
+ dsb(ishst);
for (addr = sva; addr < eva; addr += PAGE_SIZE) {
__asm __volatile(
"tlbi vaae1is, %0" : : "r"(addr >> PAGE_SHIFT));
}
__asm __volatile(
- "dsb sy \n"
+ "dsb ish \n"
"isb \n");
sched_unpin();
}
@@ -896,9 +895,9 @@ pmap_invalidate_all(pmap_t pmap)
sched_pin();
__asm __volatile(
- "dsb sy \n"
+ "dsb ishst \n"
"tlbi vmalle1is \n"
- "dsb sy \n"
+ "dsb ish \n"
"isb \n");
sched_unpin();
}
OpenPOWER on IntegriCloud