Subject: Re: 4xx critical exceptions

From: Matt Porter <[email-masked]>
Date: Wed, 4 Dec 2002 17:11:53 -0700

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
[email-masked]
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/