svn commit: r223479 - head/sys/powerpc/aim

Nathan Whitehorn nwhitehorn at FreeBSD.org
Thu Jun 23 16:34:42 UTC 2011


Author: nwhitehorn
Date: Thu Jun 23 16:34:41 2011
New Revision: 223479
URL: http://svn.freebsd.org/changeset/base/223479

Log:
  Clear any outstanding atomic reservations when traps are taken. This fixes
  some interesting bugs (mostly on SMP systems) with atomic operations
  silently failing in interrupt heavy situations, especially when using
  overflow pages.

Modified:
  head/sys/powerpc/aim/trap_subr32.S
  head/sys/powerpc/aim/trap_subr64.S

Modified: head/sys/powerpc/aim/trap_subr32.S
==============================================================================
--- head/sys/powerpc/aim/trap_subr32.S	Thu Jun 23 16:21:43 2011	(r223478)
+++ head/sys/powerpc/aim/trap_subr32.S	Thu Jun 23 16:34:41 2011	(r223479)
@@ -748,6 +748,8 @@ k_trap:
 /* Call C interrupt dispatcher: */
 trapagain:
 	addi	%r3,%r1,8
+	addi	%r4,%r1,-4		/* Clear any existing reservations */
+	stwcx.	%r3,0,%r4		
 	bl	CNAME(powerpc_interrupt)
 	.globl	CNAME(trapexit)		/* backtrace code sentinel */
 CNAME(trapexit):

Modified: head/sys/powerpc/aim/trap_subr64.S
==============================================================================
--- head/sys/powerpc/aim/trap_subr64.S	Thu Jun 23 16:21:43 2011	(r223478)
+++ head/sys/powerpc/aim/trap_subr64.S	Thu Jun 23 16:34:41 2011	(r223479)
@@ -508,6 +508,8 @@ trapagain:
 	lis	%r3,tocbase at ha
 	ld	%r2,tocbase at l(%r3)
 	addi	%r3,%r1,48
+	addi	%r4,%r1,-8		/* Clear any existing reservations */
+	stdcx.	%r3,0,%r4		
 	bl	CNAME(powerpc_interrupt)
 	nop
 


More information about the svn-src-head mailing list