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-all
mailing list