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/