Module Name:    src
Committed By:   palle
Date:           Mon Feb 23 12:36:58 UTC 2015

Modified Files:
        src/sys/arch/sparc64/sparc64: locore.s

Log Message:
sun4v: sparc_interupt - ensure that the trap level and globals level are the 
same when the flushw instruction is issued - othwise warnings occur when using 
the sun4v Legion simulator.


To generate a diff of this commit:
cvs rdiff -u -r1.377 -r1.378 src/sys/arch/sparc64/sparc64/locore.s

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc64/sparc64/locore.s
diff -u src/sys/arch/sparc64/sparc64/locore.s:1.377 src/sys/arch/sparc64/sparc64/locore.s:1.378
--- src/sys/arch/sparc64/sparc64/locore.s:1.377	Sun Oct 26 21:03:45 2014
+++ src/sys/arch/sparc64/sparc64/locore.s	Mon Feb 23 12:36:58 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.s,v 1.377 2014/10/26 21:03:45 palle Exp $	*/
+/*	$NetBSD: locore.s,v 1.378 2015/02/23 12:36:58 palle Exp $	*/
 
 /*
  * Copyright (c) 2006-2010 Matthew R. Green
@@ -3678,12 +3678,29 @@ ENTRY_NOPROFILE(sparc_interrupt)
 	bne,pt	%icc, 1f
 	 nop
 	NORMAL_GLOBALS_SUN4V
+	! Save the normal globals
+	stx	%g1, [%sp + CC64FSZ + STKB + TF_G + ( 1*8)]
+	stx	%g2, [%sp + CC64FSZ + STKB + TF_G + ( 2*8)]
+	stx	%g3, [%sp + CC64FSZ + STKB + TF_G + ( 3*8)]
+	stx	%g4, [%sp + CC64FSZ + STKB + TF_G + ( 4*8)]
+	stx	%g5, [%sp + CC64FSZ + STKB + TF_G + ( 5*8)]
+	stx	%g6, [%sp + CC64FSZ + STKB + TF_G + ( 6*8)]
+	stx	%g7, [%sp + CC64FSZ + STKB + TF_G + ( 7*8)]
+	ALTERNATE_GLOBALS_SUN4V
+	/*
+	 * In the EMBEDANY memory model %g4 points to the start of the
+	 * data segment.  In our case we need to clear it before calling
+	 * any C-code.
+	 */
+	clr	%g4
+
+	flushw			! Do not remove this insn -- causes interrupt loss
+	NORMAL_GLOBALS_SUN4V
 	ba	2f
 	 nop
 1:		
 #endif
 	NORMAL_GLOBALS_SUN4U
-2:
 	! Save the normal globals
 	stx	%g1, [%sp + CC64FSZ + STKB + TF_G + ( 1*8)]
 	stx	%g2, [%sp + CC64FSZ + STKB + TF_G + ( 2*8)]
@@ -3692,7 +3709,7 @@ ENTRY_NOPROFILE(sparc_interrupt)
 	stx	%g5, [%sp + CC64FSZ + STKB + TF_G + ( 5*8)]
 	stx	%g6, [%sp + CC64FSZ + STKB + TF_G + ( 6*8)]
 	stx	%g7, [%sp + CC64FSZ + STKB + TF_G + ( 7*8)]
-
+	ALTERNATE_GLOBALS_SUN4U
 	/*
 	 * In the EMBEDANY memory model %g4 points to the start of the
 	 * data segment.  In our case we need to clear it before calling
@@ -3701,6 +3718,8 @@ ENTRY_NOPROFILE(sparc_interrupt)
 	clr	%g4
 
 	flushw			! Do not remove this insn -- causes interrupt loss
+	NORMAL_GLOBALS_SUN4U
+2:
 	rd	%y, %l6
 	INCR64(CPUINFO_VA+CI_NINTR)	! cnt.v_ints++ (clobbers %o0,%o1)
 	rdpr	%tt, %l5		! Find out our current IPL

Reply via email to