svn commit: r222827 - head/sys/sparc64/sparc64

Marius Strobl marius at FreeBSD.org
Tue Jun 7 17:19:14 UTC 2011


Author: marius
Date: Tue Jun  7 17:19:14 2011
New Revision: 222827
URL: http://svn.freebsd.org/changeset/base/222827

Log:
  Fix a problem with r222813; given that we may only operate on interrupt
  globals here but clobber %y save and restore the latter.

Modified:
  head/sys/sparc64/sparc64/mp_exception.S

Modified: head/sys/sparc64/sparc64/mp_exception.S
==============================================================================
--- head/sys/sparc64/sparc64/mp_exception.S	Tue Jun  7 17:01:52 2011	(r222826)
+++ head/sys/sparc64/sparc64/mp_exception.S	Tue Jun  7 17:19:14 2011	(r222827)
@@ -38,7 +38,8 @@ __FBSDID("$FreeBSD$");
 	.register	%g2, #ignore
 	.register	%g3, #ignore
 
-#define	IPI_DONE(r1, r2, r3, r4, r5)					\
+#define	IPI_DONE(r1, r2, r3, r4, r5, r6)				\
+	rd	%y, r6 ;						\
 	lduw	[PCPU(CPUID)], r2 ;					\
 	mov	_NCPUBITS, r3 ;						\
 	mov	%g0, %y ;						\
@@ -50,6 +51,7 @@ __FBSDID("$FreeBSD$");
 	sub	r2, r3, r3 ;						\
 	mov	1, r4 ;							\
 	sllx	r4, r3, r4 ;						\
+	wr	r6, %y ;						\
 	ATOMIC_CLEAR_LONG(r1, r2, r3, r4)
 
 /*
@@ -87,7 +89,7 @@ ENTRY(tl_ipi_spitfire_dcache_page_inval)
 2:	brgz,pt	%g2, 1b
 	 sub	%g2, %g4, %g2
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_spitfire_dcache_page_inval)
 
@@ -127,7 +129,7 @@ ENTRY(tl_ipi_spitfire_icache_page_inval)
 2:	brgz,pt	%g2, 1b
 	 sub	%g2, %g4, %g2
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_spitfire_icache_page_inval)
 
@@ -158,7 +160,7 @@ ENTRY(tl_ipi_cheetah_dcache_page_inval)
 	blt,a,pt %xcc, 1b
 	 nop
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_cheetah_dcache_page_inval)
 
@@ -214,7 +216,7 @@ ENTRY(tl_ipi_tlb_page_demap)
 	stxa	%g0, [%g2] ASI_IMMU_DEMAP
 	flush	%g3
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_tlb_page_demap)
 
@@ -257,7 +259,7 @@ ENTRY(tl_ipi_tlb_range_demap)
 	blt,a,pt %xcc, 1b
 	 nop
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_tlb_range_demap)
 
@@ -281,7 +283,7 @@ ENTRY(tl_ipi_tlb_context_demap)
 	stxa	%g0, [%g1] ASI_IMMU_DEMAP
 	flush	%g3
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_tlb_context_demap)
 
@@ -293,7 +295,7 @@ ENTRY(tl_ipi_stick_rd)
 	rd	%asr24, %g2
 	stx	%g2, [%g1]
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_stick_rd)
 
@@ -305,6 +307,6 @@ ENTRY(tl_ipi_tick_rd)
 	rd	%tick, %g2
 	stx	%g2, [%g1]
 
-	IPI_DONE(%g5, %g1, %g2, %g3, %g4)
+	IPI_DONE(%g5, %g1, %g2, %g3, %g4, %g6)
 	retry
 END(tl_ipi_tick_rd)


More information about the svn-src-head mailing list