Relax the barriers around a TLB invalidation to only wait on

inner-shareable memory accesses. There is no need for full system barriers.

Obtained from:	ABT Systems Ltd
MFC after:	1 month
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Andrew Turner 2016-07-31 12:59:10 +00:00
parent 61852185ba
commit c5b3b20907

View File

@ -865,9 +865,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 +879,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 +896,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();
}