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:
parent
61852185ba
commit
c5b3b20907
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user