On 2002.05.28 19:56 Jos� Fonseca wrote:
> ...
>
> I'm already updating the CVS tree and rebuilding it, ...
>
I've started the server and got a kernel oops on mach64_destroy_freelist.
I've been trying to debug this but since you wrote the code you can give
me some hints. The result of ksymoops is attached.
I think that what's happening is that one of the several checks to the DMA
init functions being made have failed, and called mach64_destroy_freelist
via mach64_do_cleanup_dma, _before_ the lists have been initialized -
which isn't accounted.
It's necessary to add a check in mach64_destroy_freelist to determine if
the lists were or not initlized before attempting to free them. I think
that a check for a NULL head should be enough.
Jos� Fonseca
ksymoops 2.4.5 on i686 2.4.19-gentoo-r5. Options used
-V (default)
-k /proc/ksyms (default)
-l /proc/modules (default)
-o /lib/modules/2.4.19-gentoo-r5/ (default)
-m /usr/src/linux/System.map (default)
Warning: You did not tell me where to find symbol information. I will
assume that the log matches the kernel and modules that are running
right now and I'll use the default options above for symbol resolution.
If the current kernel and/or modules do not match the log, you can get
more accurate output by telling me the kernel version and where to find
map, modules, ksyms etc. ksymoops -h explains the options.
cs: cb_alloc(bus 6): vendor 0x10ec, device 0x8139
8139too Fast Ethernet driver 0.9.24
Unable to handle kernel NULL pointer dereference at virtual address 00000000
cc8ea1f6
*pde = 09cd3067
Oops: 0000
CPU: 0
EIP: 0010:[<cc8ea1f6>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00013246
eax: cba375f0 ebx: cba37580 ecx: 00000000 edx: c9d3a000
esi: cba375f8 edi: cba37580 ebp: cba37600 esp: c9d3be34
ds: 0018 es: 0018 ss: 0018
Process X (pid: 4994, stackpage=c9d3b000)
Stack: cba37580 c8678000 cba37580 c8678000 00003246 c026dc60 ffffffd8 00003292
c9d3be6c c0117b11 cba37580 cc8e9eb6 c8678000 00000028 c8678000 cc8e9ead
cc8f12e0 00200000 00000000 c0160081 ca26f880 c9d3bf10 c9d3bf54 c8676da0
Call Trace: [<c0117b11>] [<cc8e9eb6>] [<cc8e9ead>] [<cc8f12e0>] [<c0160081>]
[<cc8e9207>] [<cc8e9f72>] [<cc8e3854>] [<c0147432>] [<c0108aeb>]
Code: 8b 19 89 44 24 18 8d 47 68 89 44 24 1c 39 f1 74 22 8b 51 04
>>EIP; cc8ea1f6 <[mach64]mach64_destroy_freelist+3e/108> <=====
>>eax; cba375f0 <_end+b7352dc/c53ecec>
>>ebx; cba37580 <_end+b73526c/c53ecec>
>>edx; c9d3a000 <_end+9a37cec/c53ecec>
>>esi; cba375f8 <_end+b7352e4/c53ecec>
>>edi; cba37580 <_end+b73526c/c53ecec>
>>ebp; cba37600 <_end+b7352ec/c53ecec>
>>esp; c9d3be34 <_end+9a39b20/c53ecec>
Trace; c0117b11 <printk+129/158>
Trace; cc8e9eb6 <[mach64]mach64_do_cleanup_dma+ca/f4>
Trace; cc8e9ead <[mach64]mach64_do_cleanup_dma+c1/f4>
Trace; cc8f12e0 <[mach64].rodata.start+4ca0/605f>
Trace; c0160081 <ext3_do_update_inode+359/388>
Trace; cc8e9207 <[mach64]mach64_do_dma_init+407/724>
Trace; cc8e9f72 <[mach64]mach64_dma_init+92/b4>
Trace; cc8e3854 <[mach64]mach64_ioctl+d8/e8>
Trace; c0147432 <sys_ioctl+282/2e0>
Trace; c0108aeb <system_call+33/38>
Code; cc8ea1f6 <[mach64]mach64_destroy_freelist+3e/108>
00000000 <_EIP>:
Code; cc8ea1f6 <[mach64]mach64_destroy_freelist+3e/108> <=====
0: 8b 19 mov (%ecx),%ebx <=====
Code; cc8ea1f8 <[mach64]mach64_destroy_freelist+40/108>
2: 89 44 24 18 mov %eax,0x18(%esp,1)
Code; cc8ea1fc <[mach64]mach64_destroy_freelist+44/108>
6: 8d 47 68 lea 0x68(%edi),%eax
Code; cc8ea1ff <[mach64]mach64_destroy_freelist+47/108>
9: 89 44 24 1c mov %eax,0x1c(%esp,1)
Code; cc8ea203 <[mach64]mach64_destroy_freelist+4b/108>
d: 39 f1 cmp %esi,%ecx
Code; cc8ea205 <[mach64]mach64_destroy_freelist+4d/108>
f: 74 22 je 33 <_EIP+0x33> cc8ea229
<[mach64]mach64_destroy_freelist+71/108>
Code; cc8ea207 <[mach64]mach64_destroy_freelist+4f/108>
11: 8b 51 04 mov 0x4(%ecx),%edx
1 warning issued. Results may not be reliable.