Subject: PR/21750 CVS commit: src/sys/arch/sparc64/sparc64
To: None <port-sparc64-maintainer@netbsd.org, gnats-admin@netbsd.org,>
From: Chuck Silvers <chs@netbsd.org>
List: netbsd-bugs
Date: 02/12/2005 21:33:01
The following reply was made to PR port-sparc64/21750; it has been noted by GNATS.

From: Chuck Silvers <chs@netbsd.org>
To: gnats-bugs@netbsd.org
Cc: 
Subject: PR/21750 CVS commit: src/sys/arch/sparc64/sparc64
Date: Sat, 12 Feb 2005 21:32:56 +0000 (UTC)

 Module Name:	src
 Committed By:	chs
 Date:		Sat Feb 12 21:32:56 UTC 2005
 
 Modified Files:
 	src/sys/arch/sparc64/sparc64: locore.s
 
 Log Message:
 in sparc_interrupt(), wait to enable interrupts until just before calling
 the handler and disable them again right after the handler returns.
 we don't want another hardware interrupt coming in while we're mucking
 with the list pointers.  also, clear the intrhand's ih_pending pointer
 before calling the handler rather than after, so that if another interrupt
 comes in while the handler is running, we can put the intrhand back on
 the list so it will be called again.
 
 in send_softint(), disable interrupts via %pstate instead of %pil, so that
 hardware interrupts at higher levels are blocked while we manipulate the
 intrpending list.  also, if the intrhand already has ih_pending set,
 don't bother poking the SET_SOFTINT register again, since being on the list
 implies that there is already a softint pending in the hardware.
 
 these appear to fix PR 21750 (the "sleep forever" problem).
 
 while I'm here, remove more vestiges of the !INTRLIST softint stuff
 (code and comments).  and in sparc64_ipi_flush_all(), interrupts are
 already disabled so we don't need to fiddle with %pstate.
 
 
 To generate a diff of this commit:
 cvs rdiff -r1.203 -r1.204 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.