Finally managed to track down the git commit causing SGI IP32 (O2) systems to
lock up really early in the boot cycle, but I'm at a loss to understand why.
Effect:
It appears the system silently hangs somewhere in the void between function
calls when trying to invoke the memset() call in __alloc_bootmem_core() in
mm/bootmem.c. This puts the machine hardware in a state such that a simple soft
reset doesn't clear it -- the machine has to be cold booted to get it to boot a
working kernel again.
Determined Cause:
It seems this commit:
78eef01b0fae087c5fadbd85dd4fe2918c3a015f
[PATCH] on_each_cpu(): disable local interrupts
Is the cause. I've verified this by reversing this one change on a 2.6.17-rc4
tree, and it'll boot to a mini-userland (initramfs-based) and appears to
function normally.
But this is as far as I can trace this. I'm not sure what this change is doing
internally that's triggering this lockup on O2 systems. It doesn't appear to
affect Octane (IP30) systems or Origin (IP27). I haven't test-ran it on
IP22/IP28 hardware yet, so only IP32 is known to be affected. Unsure about
non-SGI MIPS hardware.
Thoughts?
--Kumba
--
Gentoo/MIPS Team Lead
Gentoo Foundation Board of Trustees
"Such is oft the course of deeds that move the wheels of the world: small hands
do them because they must, while the eyes of the great are elsewhere." --Elrond