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