Here is a brief look at how to debug from the screen dump that occurs when the kernel panics.. Suppose the kernel dump provides an EIP address of 0xC8865270 Inspect /var/log/messages looking for where the driver was last loaded. Suppose you find: IA 5515: Alloc buffers is at c886235c Then you know that the fault occurred at offset 0xc886235c - 0xC8865270 ========== 2f14 from ia_alloc_buffers Now open the file atm.map and find 0x00000308 ia_alloc_buffers This tells you the fault occured at offset.... 0x00000308 + 2f14 ========== 321c from the start of the module. Now sort the map file by address and locate the relative address of the fault... 36 0x00002ff4 ia_host_rx_intr 37 0x000032e0 ia_recv5u This indicates that the fault occured in ia_host_rx_intr since the fault address is greater than 0x00002ff4 but less than 0x000032e0. Finally find the relative address within ia_host_rx_intr by subtracting: 0x321c - 2ff4 ====== 0x228 To find the faulting instruction add -S to the CFLAGS in the makefile, touch ia_rfred.c (which contains ia_host_rx_intr) and run make. This creates ia_rfred.s. Now run as -A ia_rfred.s > ia_rfred.lst or as -alh ia_.. creating an assembler listing. Locate the start of the offending function in the listing: 959 .type ia_host_rx_intr,@function 960 ia_host_rx_intr: 961 0a90 55 pushl %ebp 962 0a91 57 pushl %edi Here we see that it is at offset 0xa90 in the module Add 0x0a90 The offset of ia_host_rx_intr +0x0228 The offset of the fault relative to ia_host_rx_intr ======= 0xcb8 The offset of the fault relative to the start of the module Find offset 0xcb8 in the listing 1133 0ca5 E8FCFFFF call ia5515_getvcc 1133 FF 1134 0caa 83C410 addl $16, %esp 1135 0cad 837C2414 cmpl $64, 20(%esp) 1135 40 1136 0cb2 761B jbe .L2251 1137 0cb4 8B442428 movl 40(%esp), %eax 1138 0cb8 8378081F cmpl $31, 8(%eax) 1139 0cbc 7E15 jle .L2239 The code string shown there 8378081F should match that at the bottom of the original dump screen. Finally map that code back to the source and hopefully figure out what the problem was. ia5515_getvcc(rx_buf->desc->vci & R_VC_MASK, &vcc); if ((len > 64) && (vcc->vci > 31)) /* (softc->vcctab[vcc->vci].r_ipaddr == 0)) */ { /* softc->vcctab[vcc->vci].l_ipaddr = ia_ipfromvcc(vcc); */ ia5515_ips(softc, vcc, skb, 1); } if (vcc != NULL) { if ((len > 64) && (vcc->vci > 31)) Here some diagnostic code had been improperly inserted before the check for null vcc and the attempt to dereference the vcc pointer in 0cb8 8378081F cmpl $31, 8(%eax) caused the fault.