Port-sparc64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: next from ddb gives RED state exception?



On Thu, 12 Jun 2014, Darren Reed wrote:

> Does this look normal?
> 
> Cheers,
> Darren
> 
> Breakpoint in pid 329.1 (ipfstat) at    netbsd:ipf_getnextrule:
> save            %
> sp, -0x370, %sp
> db{0}> next
> 
> RED State Exception
> Error enable reg: 0000.0001.00f0.001f
> CPU: 0000.0000.0000.0000
> TL=0000.0000.0000.0005 TT=0000.0000.0000.00d8
>    TPC=0000.0000.0101.1524 TnPC=0000.0000.0101.1528
> TSTATE=0000.0000.8200.0506
> TL=0000.0000.0000.0004 TT=0000.0000.0000.01ff
>    TPC=0000.0000.0101.8af4 TnPC=0000.0000.0101.8af8
> TSTATE=0000.0000.8208.1405
> TL=0000.0000.0000.0003 TT=0000.0000.0000.0060
>    TPC=0000.0000.0118.0f64 TnPC=0000.0000.0118.0f68
> TSTATE=0000.0044.8200.0605
> TL=0000.0000.0000.0002 TT=0000.0000.0000.0060
>    TPC=0000.0000.0116.62a8 TnPC=0000.0000.0116.62ac
> TSTATE=0000.0044.8200.1601
> TL=0000.0000.0000.0001 TT=0000.0000.0000.0060
>    TPC=00Skipping crash dump on recursive panic
> panic: cpu0: ipi_send: couldn't send ipi to UPAID 0 (tried 10000 times)

Oh Goody!  A watchdog reset!  I haven't seen one of those in a loong time.

You blew your trap stack.

The CPU has set of 4 trap registers.  Each time the CPU take a trap it 
stores the trap state in the registers and increases the trap level.  The 
trap handler usually reads the trap status out and saves it some where, 
then reduces the trap level so the CPU can take another trap.  That's not 
happening here.  When you ran out of trap levels the CPU took a RED state 
exception.

The TT register will tell you the trap type, in this case 0x60 which is 
the interrupt vector trap.  The TPC register will tell you what the CPU 
was doing when it got the trap.  

In this case, either something is very wrong in the interrupt dispatch 
code, which should simply read the interrupt dispatch register contents to 
figure out the interrupt source, queue the interrupt in one of the pending 
interrupt queues, issue an appropriate level interrupt, and resume 
execution, or the CPU got an IPI and failed to properly execute it.  I 
vote for #2.

I know that IPIs are used for TLB shootdown and cache flushing at least.

Eduardo


Home | Main Index | Thread Index | Old Index