svn commit: r349042 - head/sys/arm64/arm64
Alan Cox
alc at FreeBSD.org
Fri Jun 14 22:06:44 UTC 2019
Author: alc
Date: Fri Jun 14 22:06:43 2019
New Revision: 349042
URL: https://svnweb.freebsd.org/changeset/base/349042
Log:
Batch the TLB invalidations that are performed by pmap_protect() rather
than performing them one at a time.
MFC after: 10 days
Modified:
head/sys/arm64/arm64/pmap.c
Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c Fri Jun 14 20:35:37 2019 (r349041)
+++ head/sys/arm64/arm64/pmap.c Fri Jun 14 22:06:43 2019 (r349042)
@@ -2791,8 +2791,15 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t
for (l3p = pmap_l2_to_l3(l2, sva); sva != va_next; l3p++,
sva += L3_SIZE) {
l3 = pmap_load(l3p);
- if (!pmap_l3_valid(l3))
+ if (!pmap_l3_valid(l3)) {
+ if (va != va_next) {
+ pmap_invalidate_range(pmap, va, sva);
+ va = va_next;
+ }
continue;
+ }
+ if (va == va_next)
+ va = sva;
nbits = 0;
if ((prot & VM_PROT_WRITE) == 0) {
@@ -2807,9 +2814,9 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t
nbits |= ATTR_XN;
pmap_set(l3p, nbits);
- /* XXX: Use pmap_invalidate_range */
- pmap_invalidate_page(pmap, sva);
}
+ if (va != va_next)
+ pmap_invalidate_range(pmap, va, sva);
}
PMAP_UNLOCK(pmap);
}
More information about the svn-src-all
mailing list