svn commit: r305540 - stable/11/sys/arm64/arm64

Andrew Turner andrew at FreeBSD.org
Wed Sep 7 15:37:41 UTC 2016


Author: andrew
Date: Wed Sep  7 15:37:39 2016
New Revision: 305540
URL: https://svnweb.freebsd.org/changeset/base/305540

Log:
  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

Modified:
  stable/11/sys/arm64/arm64/pmap.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/arm64/arm64/pmap.c
==============================================================================
--- stable/11/sys/arm64/arm64/pmap.c	Wed Sep  7 14:24:29 2016	(r305539)
+++ stable/11/sys/arm64/arm64/pmap.c	Wed Sep  7 15:37:39 2016	(r305540)
@@ -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_off
 
 	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_of
 	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();
 }


More information about the svn-src-all mailing list