Thread (1 message) 1 message, 1 author, 2002-12-05

Re: 4xx critical exceptions

From: Matt Porter <hidden>
Date: 2002-12-05 00:11:53

On Wed, Dec 04, 2002 at 03:00:47PM -0800, Brian Kuschak wrote:

<snip>
The COMMON_PROLOG in head_4xx.S uses SPRG0,1 to
temporarily save r20, r21 for scratch use.  Problem is
this prologue is used for both critical and
non-critical interrupts.  As I understand it, MSR[EE]
is cleared for external interrupts, but MSR[CE] is
not.  If a critical interrupt occurs while handling a
non-critical interrupt, the SPRG0,1 can be overwritten
while handling the critical interrupt.

I'm guessing we don't have any unused SPRGx registers
to use here.  I was thinking about temporarily
disabling CE until saving SPRG0,1, but that can't be
done without using at least one register, and none of
them are saved at that point.

Any ideas?
The linuxppc-2.5 tree has a (partial) implementation of critical
exceptions.  The method used is to save the registers into a
region preallocated in head_*.S.
P.S. BTW, is bk://ppc.bkbits.net/linuxppc_2_5 the
right place for the latest 2.5 code?
That's a dead tree.  You want bk://ppc.bkbits.net/linuxppc-2.5

Regards,
--
Matt Porter
porter@cox.net
This is Linux Country. On a quiet night, you can hear Windows reboot.

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help