Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

LKM OOPS do_softirq.

14 views
Skip to first unread message

Kevin

unread,
Sep 1, 2003, 9:33:59 AM9/1/03
to
Good Day,

I am developing a device driver for a custom PCI device
using DMA busmastering. It is interrupt driven and has a
random error that crashes the kernel. Ksymoops reports
vary slightly in the traceback, but generally the failure is
traced to do_softirq(). My driver provides the DMA physical address
to the card via the bottom half(tasklet) called from do_softirq().
The last module printk() message received is a return message
back from my tasklet.
I have a two help questions and 2 ksymoops reports.

My system configuration is a single board CompactPCI PIII and a PCI
board on a PCI back plane. I am running kernel version 2.4.21 and I am
not sharing my interrupt with any other devices.

My questions.
1. I am reasonably confident I am providing a valid physical address
to the PCI Card. If the hardware screws up can it crash my kernel
and how would I catch this error? Is there a way to monitor
the PCI Bus outside of my module?

2. Does anything in these 2 oops report look familar to anyone? Can
I be causing this failure with some deadlock or data corruption? I have
only one rwlock_t and one spinlock_t. I am not sure how to debug them,
but I checked debug spin_locks in the kernel.

Kymoops reports follow.

Thank you.
Kevin

"Windows Free 2003"


Report 1
----------------------------------------------------------------------------
ksymoops 2.4.8 on i686 2.4.21. Options used
-V (default)
-k ./ksyms (specified)
-l ./modules (specified)
-o /lib/modules/2.4.21/ (default)
-m /usr/src/linux/System.map (default)

Unable to handle kernel paging request at virtual address fffff6*pde =
00001063
Oops: 0000
CPU: 0
EIP: 0010:[<c0119e12>] Tainted: P
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010286
eax: 00000000 ebx: fffffff6 ecx: 00000003 edx: fffffff6
esi: c0368b78 edi: fffffff6 ebp: c5d13f70 esp: c5d13f68
ds: 0018 es: 0018 ss: 0018
Process miniterminal (pid: 307, stackpage=c5d13000)
Stack: 00000000 00000001 c5d13f8c c0119cd6 c0368b78 00000046 00000009
00000009
c5e9749c c5d13fb0 c0108b90 00000009 c5d13fb8 c5e9749c c5e9749c
00000004
40400008 bffff9a4 bffff678 c010b218 00000004 40106c1a bffff660
40400008
Call Trace:
[<c0119cd6>] do_softirq+0xa6/0xb0 [kernel]
[<c0108b90>] do_IRQ+0xb0/0xc0 [kernel]
[<c010b218>] call_do_IRQ+0x5/0xd [kernel]
[<c01073fc>] system_call+0x0/0x38 [kernel]
Code: 8b 1b 8b 42 08 85 c0 75 25 0f b3 42 04 19 c0 85 c0 75 08 0f


>>EIP; c0119e12 <tasklet_action+22/70> <=====

>>esi; c0368b78 <softirq_vec+18/100>
>>ebp; c5d13f70 <_end+597ac67/8a8ad57>
>>esp; c5d13f68 <_end+597ac5f/8a8ad57>

Trace; c0119cd6 <do_softirq+a6/b0>
Trace; c0108b90 <do_IRQ+b0/c0>
Trace; c010b218 <call_do_IRQ+5/d>
Trace; c01073fc <system_call+0/38>

Code; c0119e12 <tasklet_action+22/70>
00000000 <_EIP>:
Code; c0119e12 <tasklet_action+22/70> <=====
0: 8b 1b mov (%ebx),%ebx <=====
Code; c0119e14 <tasklet_action+24/70>
2: 8b 42 08 mov 0x8(%edx),%eax
Code; c0119e17 <tasklet_action+27/70>
5: 85 c0 test %eax,%eax
Code; c0119e19 <tasklet_action+29/70>
7: 75 25 jne 2e <_EIP+0x2e>
Code; c0119e1b <tasklet_action+2b/70>
9: 0f b3 42 04 btr %eax,0x4(%edx)
Code; c0119e1f <tasklet_action+2f/70>
d: 19 c0 sbb %eax,%eax
Code; c0119e21 <tasklet_action+31/70>
f: 85 c0 test %eax,%eax
Code; c0119e23 <tasklet_action+33/70>
11: 75 08 jne 1b <_EIP+0x1b>
Code; c0119e25 <tasklet_action+35/70>
13: 0f 00 00 sldtl (%eax)

Entering kdb (current=0xc5d12000, pid 307) Oops: Oops
eax = 0x00000000 ebx = 0xfffffff6 ecx = 0x00000003 edx = 0xfffffff6
esi = 0xc0368b78 edi = 0xfffffff6 esp = 0xc5d13f68 eip = 0xc0119e12
ebp = 0xc5d13f70 xss = 0xc0240018 xcs = 0x00000010 eflags = 0x00010286


----------------------------------------------------------------------
**********************************************************************
Report 2.
ksymoops 2.4.8 on i686 2.4.21. Options used
-V (default)
-k ./ksyms (specified)
-l ./modules (specified)
-o /lib/modules/2.4.21/ (default)
-m /usr/src/linux/System.map (default)

Unable to handle kernel NULL pointer dereference at virtual add1*pde =
00000000
Oops: 0000
soc_mini
CPU: 0
EIP: 0010:[<c0119e12>] Tainted: P
EFLAGS: 00010202
EIP is at tasklet_action+0x22/0x70 [kernel]
eax: c64d9f54 ebx: 00000001 ecx: 00000008 edx: 00000001
esi: c0368b78 edi: fffffff7 ebp: c64d9f7c esp: c64d9f74
ds: 0018 es: 0018 ss: 0018
Process miniterminal (pid: 413, stackpage=c64d9000)
Stack: c64d9fc4 c64d9f54 c64d9f98 c0119cd6 c0368b78 00000046 00000008
0000000e
c11658ac c64d9fbc c0108b90 0000000e c64d9fc4 c11658ac c11658ac
000257fc
40400008 bffff984 bffff658 c010b218 000257fc 40106c1a bffff640
40400008
Call Trace:
[<c0119cd6>] do_softirq+0xa6/0xb0 [kernel]
[<c0108b90>] do_IRQ+0xb0/0xc0 [kernel]
[<c010b218>] call_do_IRQ+0x5/0xd [kernel]


Code: 8b 1b 8b 42 08 85 c0 75 25 0f b3 42 04 19 c0 85 c0 75 08 0f


Entering kdb (current=0xc64d8000, pid 413) Oops: Oops
due to oops @ 0xc0119e12
eax = 0xc64d9f54 ebx = 0x00000001 ecx = 0x00000008 edx = 0x00000001
esi = 0xc0368b78 edi = 0xfffffff7 esp = 0xc64d9f74 eip = 0xc0119e12
ebp = 0xc64d9f7c xss = 0xc0240018 xcs = 0x00000010 eflags = 0x00010202
xds = 0x00000018 xes = 0x00000018 origeax = 0xffffffff &regs = 0xc64d9f40


0 new messages