sti() freezes the kernel
Hi all,
I'm actually trying to start a 2.4 kernel on our new card.
The kernel freezes when enabling interrupts with sti() in start_kernel() (just before calculating BogoMips...).
This looks like an interrupts is up when enabling so that it stops the MIPS and freezes the kernel.
I'm looking after this interrupt but I would like to know if there could be any others reasons for my kernel to freeze when doing a call to sti();
Many thanks in advance for your suggestions...
@+ Yoann
Quoted 7 lines · Yoann Allain
I'm actually trying to start a 2.4 kernel on our new card. The kernel freezes when enabling interrupts with
sti()instart_kernel()(just before calculating BogoMips...).
This looks like an interrupts is up when enabling so that it stops the MIPS and freezes the kernel.
I'm looking after this interrupt but I would like to know if there could be any others reasons for my kernel to freeze when doing a call tosti();
This is a fairly scenario and as you suspect it's being caused by interrupt problems, such as interrupts still pending from the firmware, being not initialized at all or similar.
Ralf
Quoted 11 lines · Ralf Baechle
Quoted 6 lines · Yoann Allain
I'm actually trying to start a 2.4 kernel on our new card.
The kernel freezes when enabling interrupts withsti()instart_kernel()(just before calculating BogoMips...).
This looks like an interrupts is up when enabling so that it stops the MIPS and freezes the kernel.
I'm looking after this interrupt but I would like to know if there could be any others reasons for my kernel to freeze when doing a call tosti();
Quoted 7 lines
This is a fairly scenario and as you suspect it's being caused by interrupt problems, such as interrupts still pending from the firmware, being not initialized at all or similar.
Ralf
Since last mail I played with the interrupt masks (IM - bits 15-8 in MIPS status register) . From the MIPS cause register, it seems that the bit 15 (hardware interrupt 5 or timer interrupt) is the originator of the freezing interrupt. And the exception code shown for this interrupt is 6 corresponding to a Bus error exception. I think there's a pointer to the interrupt handler not correctly initialized. So that the interrupt makes a jump to nowhere. The Bus monitors are not enabled, this is perhaps why the kernel freezes instead of printing the details of the exception.
Am I right?
Quoted 7 lines · Yoann Allain
Since last mail I played with the interrupt masks (IM - bits 15-8 in MIPS status register) . From the MIPS cause register, it seems that the bit 15 (hardware interrupt 5 or timer interrupt) is the originator of the freezing interrupt. And the exception code shown for this interrupt is 6 corresponding to a Bus error exception. I think there's a pointer to the interrupt handler not correctly initialized. So that the interrupt makes a jump to nowhere.
In which case you should get a nice register dump with $ra pointing to offending jalr instruction + 8 bytes. Of course that requieres you to get printk working even earlier but with a serial console that's trivial.
Ralf