Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jun 2011 16:34:42 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r223479 - head/sys/powerpc/aim
Message-ID:  <201106231634.p5NGYgTV007387@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@ha
 	ld	%r2,tocbase@l(%r3)
 	addi	%r3,%r1,48
+	addi	%r4,%r1,-8		/* Clear any existing reservations */
+	stdcx.	%r3,0,%r4		
 	bl	CNAME(powerpc_interrupt)
 	nop
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106231634.p5NGYgTV007387>