I ran across what looks like a bug in the 'kernel_entry' function in linux/arch/mips/kernel/head.S while chasing another problem. Our version of kernel_entry is for 2.4.17. 2.4.22 seems to have the same problem. kernel_entry initializes the kernel stack pointer 'kernelsp'. But then immediately after this clears the bss, which has the side effect of setting kernelsp to 0. In our system, on initial entry to cpu_idle(), kernelsp is 0. The bug "heals" itself the first time schedule() is called. But, if for some reason CP0_STATUS doesn't have CU0 set at startup (which would be bad for other reasons), and you get an exception before the first call to schedule() (e.g., the syscall to create "init"), the exception handler will try to save registers starting from kernelsp, which is 0. from head.S: NESTED(kernel_entry, 16, sp) . . . /* * Stack for kernel and init, current variable */ la $28, init_task_union addiu t0, $28, KERNEL_STACK_SIZE-32 subu sp, t0, 4*SZREG sw t0, kernelsp /* <-- this is going to get overwritten below when bss is cleared... [srs] */ /* The firmware/bootloader passes argc/argp/envp * to us as arguments. But clear bss first because * the romvec and other important info is stored there * by prom_init(). */ la t0, _edata /* <-- here is the code that eventually clears kernelsp [srs] */ sw zero, (t0) la t1, (_end - 4) 1: addiu t0, 4 bne t0, t1, 1b sw zero, (t0) jal init_arch nop END(kernel_entry) --steve