Skip to contentSkip to conversation

sti() freezes the kernel

DISCUSSION Yoann Allain 2 participants 4 messages Oct 17, 2005 MIPS

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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() 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();

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

#2 lore raw
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 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();

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?

#3 lore raw
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