svn commit: r285655 - head/sys/arm64/arm64

Zbigniew Bodek zbb at FreeBSD.org
Fri Jul 17 14:33:49 UTC 2015


Author: zbb
Date: Fri Jul 17 14:33:47 2015
New Revision: 285655
URL: https://svnweb.freebsd.org/changeset/base/285655

Log:
  Fix possible coherency issues between PEs related to I-cache
  
  Basing on B.2.3.4:
  Synchronization and coherency issues between data and
  instruction accesses.
  
  To ensure that modified instructions are visible to all PEs
  (Processing Elements) in a shareability domain one need to
  perform following sequence:
      1. Clean D-cache
      2. Ensure the visibility of data cleaned from cache
      3. Invalidate I-cache
      4. Ensure completion
      5. In SMP system PE must issue isb to ensure execution of the
         modified instructions
  
  Reviewed by:   andrew
  Obtained from: Semihalf
  Sponsored by:  The FreeBSD Foundation
  Differential Revision: https://reviews.freebsd.org/D3106

Modified:
  head/sys/arm64/arm64/cpufunc_asm.S

Modified: head/sys/arm64/arm64/cpufunc_asm.S
==============================================================================
--- head/sys/arm64/arm64/cpufunc_asm.S	Fri Jul 17 14:08:08 2015	(r285654)
+++ head/sys/arm64/arm64/cpufunc_asm.S	Fri Jul 17 14:33:47 2015	(r285655)
@@ -61,17 +61,18 @@ __FBSDID("$FreeBSD$");
 	add	x1, x1, x2		/* Add these to the size */
 	bic	x0, x0, x4		/* Clear the low bit of the address */
 1:
+	dc	\dcop, x0
+	dsb	ish
 .if \ic != 0
 	ic	\icop, x0
+	dsb	ish
 .endif
-	dc	\dcop, x0
 	add	x0, x0, x3		/* Move to the next line */
 	subs	x1, x1, x3		/* Reduce the size */
 	b.hi	1b			/* Check if we are done */
 .if \ic != 0
 	isb
 .endif
-	dsb	ish
 	ret
 .endm
 


More information about the svn-src-all mailing list