Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Jun 2019 22:06:44 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r349042 - head/sys/arm64/arm64
Message-ID:  <201906142206.x5EM6i9W031198@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201906142206.x5EM6i9W031198>