Hi,

How do I debug something like this:
Internal error: Oops - undefined instruction: 0 [#1]
 Modules linked in: i2s sinus spi rtc sfr lpc2468eth
 CPU: 0
 pc : [<a19e671c>]    lr : [<a001d3d8>]    Not tainted
 sp : a01dbf00  ip : a01dbf28  fp : a01dbf24
 r10: a01dbf5c  r9 : 00000001  r8 : 00000019
 r7 : 00000000  r6 : 00000000  r5 : a01da000  r4 : a03b8260
 r3 : 40000013  r2 : a01dbf5c  r1 : 00000000  r0 : 00000019
 Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32  Segment user
 Process swapper (pid: 0, stack limit = 0xa01da194)
 Stack: (0xa01dbf00 to 0xa01dc000)
bf00: a01ee088 00000019 a01dbf5c 00000002 a01da000 a01da000 a01dbf40 a01dbf28 bf20: a001d62c a001d374 a01da000 a01dbf5c 00000001 a01dbf58 a01dbf44 a001d7bc bf40: a001d5d4 e3e04000 a01dbf90 a01dbfcc a01dbf5c a001c2f4 a001d778 ffffffea bf60: 00000000 00000000 60000013 a01da000 a001e254 a01da000 00000000 00000000 bf80: a001e254 a01da000 a01dbfcc a01dbf94 a01dbfa4 a001e208 a001e324 60000013 bfa0: e3e04000 a01f57dc a01ed738 a01ee278 a1f5a927 a0205b38 a01ee26c a1f5aa64 bfc0: a01dbfdc a01dbfd0 a001c038 a001e2bc a01dbffc a01dbfe0 a00087ec a001c010 bfe0: a0008374 a01ee288 00000000 a0205b38 00000000 a01dc000 a1f8953c a0008678
 Backtrace:
 Function entered at [<a001d364>] from [<a001d62c>]
 Function entered at [<a001d5c4>] from [<a001d7bc>]
  r6 = 00000001  r5 = A01DBF5C  r4 = A01DA000
 Function entered at [<a001d768>] from [<a001c2f4>]
  r5 = A01DBF90  r4 = E3E04000
 Function entered at [<a001e2ac>] from [<a001c038>]
 Function entered at [<a001c000>] from [<a00087ec>]
 Function entered at [<a0008668>] from [<a1f8953c>]
 Code: 65727563 75642064 676e6972 53324920 (414d4420)
  <0>Kernel panic - not syncing: Aiee, killing interrupt handler!

I suppose the error is in my interrupt handler (it only happens when I load my own module), but it's so simple that I can't believe it's very buggy:
------------
irqreturn_t i2s_dma_irq(int irq,void *dev_id,struct pt_regs *regs) {
    signed char *temp;
    if(m_reg_read(GPDMA_INT_TCSTAT)) {
        m_reg_bfs(GPDMA_INT_TCCLR,0x3);
        temp=active;
        active=passive;
        passive=temp;
        buf_filled=0;
        wake_up_interruptible(&write_wait_q);
    }
    else if(m_reg_read(GPDMA_INT_ERR_STAT)) {
        m_reg_bfs(GPDMA_INT_ERR_CLR,0x3);
        printk("Error occured during I2S DMA tranfer\n");
        m_reg_bfs(I2S_DAO,0x3<<3); /*Stop I2S*/
    } else {
        printk("Unknown int\n");
    }
    return IRQ_HANDLED;
}
---------------

Any comments are welcome!

Kind regards,

Remco Poelstra

_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to