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.