X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/blobdiff_plain/70ab712fc0b79630fb89ed38713b7b03519e9226..dc7f5a3374014b178414d75c09b9484403f186cc:/doc/notes.org diff --git a/doc/notes.org b/doc/notes.org index 6f52286..d25de88 100644 --- a/doc/notes.org +++ b/doc/notes.org @@ -10,4 +10,982 @@ set bootcmd 'run bootcmd_tftpnfs_static' * Questions -** Why crc modification alone does not produce an error and is not returned by cangw -L? +** Why crc modification alone does not produce an error and is not returned by cangw -L? +** Why two simultaneous latesters return ENOBUFS even if txqueue is set high? +latester -d can0 +latester -d can1 +* Kernel oops +** Linux-2.6.33.7-00005-ge2f49b5 +Unable to handle kernel paging request for instruction fetch +Faulting instruction address: 0x8d56acc4 +Oops: Kernel access of bad area, sig: 11 [#1] +PREEMPT Shark +Modules linked in: +NIP: 8d56acc4 LR: c0260208 CTR: 8d56acc7 +REGS: c03f3bc0 TRAP: 0400 Not tainted (2.6.33.7-00005-ge2f49b5) +MSR: 20009032 CR: 24008028 XER: 0000005f +TASK = c03d5478[0] 'swapper' THREAD: c03f2000 +GPR00: 8d56acc7 c03f3c70 c03d5478 c7990160 c78d54ad 00000048 c79901a4 00000002 +GPR08: 000000e0 00000000 00000001 00000002 44000022 7f33ff4e 80000000 00000042 +GPR16: 00000008 20000000 c909e900 00000001 c03f3d78 c79326e0 00000008 c799dc1c +GPR24: c7976800 c78d54f9 c7949828 c7a06620 c03f2000 c7990160 c78d54ad c03f3c70 +NIP [8d56acc4] 0x8d56acc4 +LR [c0260208] dev_queue_xmit+0x2f0/0x588 +Call Trace: +[c03f3c70] [c025ff74] dev_queue_xmit+0x5c/0x588 (unreliable) +[c03f3ca0] [c02d62d8] can_send+0x9c/0x1a0 +[c03f3cc0] [c02d97a8] can_can_gw_rcv+0x108/0x164 +[c03f3cf0] [c02d52ac] can_rcv_filter+0x240/0x2e8 +[c03f3d10] [c02d541c] can_rcv+0xc8/0x140 +[c03f3d30] [c025e968] netif_receive_skb+0x2ac/0x350 +[c03f3d70] [c020a230] mscan_rx_poll+0x1c0/0x464 +[c03f3dd0] [c025f428] net_rx_action+0x104/0x22c +[c03f3e20] [c00345e0] __do_softirq+0x10c/0x21c +[c03f3e70] [c00075d0] do_softirq+0x58/0x74 +[c03f3e80] [c0034300] irq_exit+0x8c/0xbc +[c03f3e90] [c00076c8] do_IRQ+0xdc/0x188 +[c03f3ec0] [c0014db0] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0x104/0x114 + LR = cpu_idle+0x104/0x114 +[c03f3f80] [c000aefc] cpu_idle+0x68/0x114 (unreliable) +[c03f3fa0] [c0003f40] rest_init+0xa4/0xc4 +[c03f3fc0] [c039f918] start_kernel+0x2e4/0x2fc +[c03f3ff0] [00003438] 0x3438 +Instruction dump: +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c03f3ab0] [c0009cdc] show_stack+0x70/0x1d4 (unreliable) +[c03f3b00] [c02ff5ec] dump_stack+0x2c/0x44 +[c03f3b10] [c02ff6b0] panic+0xac/0x19c +[c03f3b60] [c0011df8] die+0x188/0x1a4 +[c03f3b90] [c00165c8] bad_page_fault+0x90/0xe0 +[c03f3bb0] [c0014bb8] handle_page_fault+0x7c/0x80 +--- Exception: 400 at 0x8d56acc4 + LR = dev_queue_xmit+0x2f0/0x588 +[c03f3c70] [c025ff74] dev_queue_xmit+0x5c/0x588 (unreliable) +[c03f3ca0] [c02d62d8] can_send+0x9c/0x1a0 +[c03f3cc0] [c02d97a8] can_can_gw_rcv+0x108/0x164 +[c03f3cf0] [c02d52ac] can_rcv_filter+0x240/0x2e8 +[c03f3d10] [c02d541c] can_rcv+0xc8/0x140 +[c03f3d30] [c025e968] netif_receive_skb+0x2ac/0x350 +[c03f3d70] [c020a230] mscan_rx_poll+0x1c0/0x464 +[c03f3dd0] [c025f428] net_rx_action+0x104/0x22c +[c03f3e20] [c00345e0] __do_softirq+0x10c/0x21c +[c03f3e70] [c00075d0] do_softirq+0x58/0x74 +[c03f3e80] [c0034300] irq_exit+0x8c/0xbc +[c03f3e90] [c00076c8] do_IRQ+0xdc/0x188 +[c03f3ec0] [c0014db0] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0x104/0x114 + LR = cpu_idle+0x104/0x114 +[c03f3f80] [c000aefc] cpu_idle+0x68/0x114 (unreliable) +[c03f3fa0] [c0003f40] rest_init+0xa4/0xc4 +[c03f3fc0] [c039f918] start_kernel+0x2e4/0x2fc +[c03f3ff0] [00003438] 0x3438 +Rebooting in 180 seconds.. + +** Current kernel +*** Panic +Unable to handle kernel paging request for instruction fetch +Faulting instruction address: 0x8cd6acc4 +Oops: Kernel access of bad area, sig: 11 [#1] +PREEMPT Shark +Modules linked in: +NIP: 8cd6acc4 LR: c025fdac CTR: 8cd6acc7 +REGS: c03f3bd0 TRAP: 0400 Not tainted (2.6.33.7-00005-ge2f49b5) +MSR: 20009032 CR: 22008028 XER: 0000005f +TASK = c03d6478[0] 'swapper' THREAD: c03f2000 +GPR00: 8cd6acc7 c03f3c80 c03d6478 c79fec00 c78cd4ad 00000048 c79fec44 00000002 +GPR08: 000000e0 00000000 00000001 c03f3c80 42000022 7f33ff4e 80000000 00000042 +GPR16: 00000008 20000000 c909e900 00000001 c03f3d88 c79386e0 00000008 c79fe51c +GPR24: 0000000c c78cd4f9 c7975800 c7949828 c7a33d24 c79fec00 c78cd4ad c03f3c80 +NIP [8cd6acc4] 0x8cd6acc4 +LR [c025fdac] dev_queue_xmit+0xec/0x588 +Call Trace: +[c03f3c80] [c025fd68] dev_queue_xmit+0xa8/0x588 (unreliable) +[c03f3cb0] [c02d5128] can_send+0x9c/0x1a0 +[c03f3cd0] [c02d85ec] can_can_gw_rcv+0x108/0x164 +[c03f3d00] [c02d3fdc] can_rcv_filter+0xf8/0x2e8 +[c03f3d20] [c02d4294] can_rcv+0xc8/0x140 +[c03f3d40] [c025e6f8] netif_receive_skb+0x2a8/0x34c +[c03f3d80] [c020a774] mscan_rx_poll+0x1c0/0x464 +[c03f3de0] [c025f1b8] net_rx_action+0x104/0x238 +[c03f3e30] [c00368c8] __do_softirq+0x128/0x244 +[c03f3e80] [c00075e0] do_softirq+0x64/0x80 +[c03f3e90] [c00365d0] irq_exit+0x98/0xc4 +[c03f3ea0] [c00076d8] do_IRQ+0xdc/0x188 +[c03f3ed0] [c0014d40] ret_from_except+0x0/0x14 +[c03f3f90] [c000aed8] cpu_idle+0x68/0x10c (unreliable) +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c03f3fb0] [c0003f34] rest_init+0x98/0xc4 +[c03f3fc0] [c039f914] start_kernel+0x2e0/0x2f8 +[c03f3ff0] [00003438] 0x3438 +Instruction dump: +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c03f3ac0] [c0009cc0] show_stack+0x70/0x1d4 (unreliable) +[c03f3b10] [c02fde74] dump_stack+0x2c/0x44 +[c03f3b20] [c02fdf30] panic+0xa4/0x19c +[c03f3b70] [c0011d90] die+0x184/0x1a0 +--- Exception: c03f3d88 at 0x42000022 + LR = 0x8 +[c03f3ba0] [c0016558] bad_page_fault+0x90/0xe0 (unreliable) +[c03f3bc0] [c0014b48] handle_page_fault+0x7c/0x80 +--- Exception: 400 at 0x8cd6acc4 + LR = dev_queue_xmit+0xec/0x588 +[c03f3c80] [c025fd68] dev_queue_xmit+0xa8/0x588 (unreliable) +[c03f3cb0] [c02d5128] can_send+0x9c/0x1a0 +[c03f3cd0] [c02d85ec] can_can_gw_rcv+0x108/0x164 +[c03f3d00] [c02d3fdc] can_rcv_filter+0xf8/0x2e8 +[c03f3d20] [c02d4294] can_rcv+0xc8/0x140 +[c03f3d40] [c025e6f8] netif_receive_skb+0x2a8/0x34c +[c03f3d80] [c020a774] mscan_rx_poll+0x1c0/0x464 +[c03f3de0] [c025f1b8] net_rx_action+0x104/0x238 +[c03f3e30] [c00368c8] __do_softirq+0x128/0x244 +[c03f3e80] [c00075e0] do_softirq+0x64/0x80 +[c03f3e90] [c00365d0] irq_exit+0x98/0xc4 +[c03f3ea0] [c00076d8] do_IRQ+0xdc/0x188 +[c03f3ed0] [c0014d40] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c03f3f90] [c000aed8] cpu_idle+0x68/0x10c (unreliable) +[c03f3fb0] [c0003f34] rest_init+0x98/0xc4 +[c03f3fc0] [c039f914] start_kernel+0x2e0/0x2f8 +[c03f3ff0] [00003438] 0x3438 + +*** Disassemble + if (q->enqueue) { +c025fd54: 80 1e 00 00 lwz r0,0(r30) +c025fd58: 2f 80 00 00 cmpwi cr7,r0,0 +c025fd5c: 41 9e 01 94 beq- cr7,c025fef0 + raw_spin_lock_init(&(_lock)->rlock); \ +} while (0) + +static inline void spin_lock(spinlock_t *lock) +{ + raw_spin_lock(&lock->rlock); +c025fd60: 38 60 00 01 li r3,1 +c025fd64: 4b dc 47 cd bl c0024530 +c025fd68: 80 1e 00 4c lwz r0,76(r30) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +{ + spinlock_t *root_lock = qdisc_lock(q); + int rc; + + spin_lock(root_lock); + if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) { +c025fd6c: 3b 3e 00 4c addi r25,r30,76 +c025fd70: 70 09 00 04 andi. r9,r0,4 +c025fd74: 40 82 01 f0 bne- c025ff64 + +*** Corresponding C code +static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, + struct net_device *dev, + struct netdev_queue *txq) +{ + spinlock_t *root_lock = qdisc_lock(q); + int rc; + + spin_lock(root_lock); + +** 2.6.36.1-00006-g2e11adb +Unable to handle kernel paging request for data at address 0xfffffffe +Faulting instruction address: 0xc0262358 +Oops: Kernel access of bad area, sig: 11 [#1] +PREEMPT Shark +last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev +Modules linked in: +NIP: c0262358 LR: c026218c CTR: 00000000 +REGS: c7ffbd20 TRAP: 0300 Not tainted (2.6.36.1-00006-g2e11adb) +MSR: 00009032 CR: 42008024 XER: 0000005f +DAR: fffffffe, DSISR: 20000000 +TASK = c03e44d0[0] 'swapper' THREAD: c0400000 +GPR00: c7939560 c7ffbdd0 c03e44d0 00000100 00000000 00000060 c798bb64 00000000 +GPR08: 000000e8 00000002 00000001 00000002 42000022 7f33ff4e 80000000 00000042 +GPR16: 00000008 20000000 c909e900 00000001 c7ffbef8 c0404a84 c0404a80 c78b4000 +GPR24: 00000000 c798bb20 c79395c0 c7a77e20 c796f800 c798bb20 fffffffe c7ffbdd0 +NIP [c0262358] dev_queue_xmit+0x200/0x4f0 +LR [c026218c] dev_queue_xmit+0x34/0x4f0 +Call Trace: +[c7ffbdd0] [c026218c] dev_queue_xmit+0x34/0x4f0 (unreliable) +[c7ffbe00] [c02dd1f4] can_send+0x9c/0x1a0 +[c7ffbe20] [c02e07a8] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02dc224] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02dc4dc] can_rcv+0xc8/0x140 +[c7ffbe90] [c02606f0] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c0260934] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c020d72c] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c0260c64] net_rx_action+0x104/0x230 +[c7ffbfa0] [c0031350] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011704] call_do_softirq+0x14/0x24 +[c0401e60] [c0006bdc] do_softirq+0x84/0xa8 +[c0401e80] [c0031074] irq_exit+0x88/0xb4 +[c0401e90] [c0006d60] do_IRQ+0xe0/0x234 +[c0401ec0] [c00123d4] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c0401f80] [c000a7a8] cpu_idle+0x68/0x10c (unreliable) +[c0401fa0] [c0003ec0] rest_init+0x9c/0xbc +[c0401fc0] [c03ad91c] start_kernel+0x2c0/0x2d8 +[c0401ff0] [00003438] 0x3438 +Instruction dump: +41920198 817e000c 2f8b0000 419c018c 55693032 55602036 7ca04850 5569043e +b13d0074 801c01c8 7f402a14 83da0004 <801e0000> 2f800000 409efe88 801c00d8 +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c7ffbc00] [c00095dc] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbc50] [c030664c] dump_stack+0x2c/0x44 +[c7ffbc60] [c0306720] panic+0xbc/0x1fc +[c7ffbcc0] [c000f34c] die+0x1b8/0x1e8 +--- Exception: c7ffbef8 at 0x42000022 + LR = 0x8 +[c7ffbcf0] [c0013b8c] bad_page_fault+0x90/0xe0 (unreliable) +[c7ffbd10] [c00121dc] handle_page_fault+0x7c/0x80 +--- Exception: 300 at dev_queue_xmit+0x200/0x4f0 + LR = dev_queue_xmit+0x34/0x4f0 +[c7ffbe00] [c02dd1f4] can_send+0x9c/0x1a0 +[c7ffbe20] [c02e07a8] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02dc224] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02dc4dc] can_rcv+0xc8/0x140 +[c7ffbe90] [c02606f0] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c0260934] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c020d72c] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c0260c64] net_rx_action+0x104/0x230 +[c7ffbfa0] [c0031350] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011704] call_do_softirq+0x14/0x24 +[c0401e60] [c0006bdc] do_softirq+0x84/0xa8 +[c0401e80] [c0031074] irq_exit+0x88/0xb4 +[c0401e90] [c0006d60] do_IRQ+0xe0/0x234 +[c0401ec0] [c00123d4] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c0401f80] [c000a7a8] cpu_idle+0x68/0x10c (unreliable) +[c0401fa0] [c0003ec0] rest_init+0x9c/0xbc +[c0401fc0] [c03ad91c] start_kernel+0x2c0/0x2d8 +[c0401ff0] [00003438] 0x3438 + +** With "Spinlock and rw-lock debugging: basic checks" +BUG: spinlock bad magic on CPU#0, swapper/0 + lock: c7985abc, .magic: c0000000, .owner: /-1, .owner_cpu: -1069448776 + +*** later +BUG: spinlock bad magic on CPU#0, swapper/0 + lock: c798cabc, .magic: c0000000, .owner: /-1, .owner_cpu: -1069337880 +Call Trace: +[c7ffbd00] [c000a090] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbd50] [c031157c] dump_stack+0x2c/0x44 +[c7ffbd60] [c01c0914] spin_bug+0x84/0xd0 +[c7ffbd80] [c01c0ac0] do_raw_spin_lock+0x3c/0x15c +[c7ffbdb0] [c0310e34] _raw_spin_lock+0x34/0x4c +[c7ffbdd0] [c026d170] dev_queue_xmit+0xa4/0x428 +[c7ffbe00] [c02e7a28] can_send+0x9c/0x1a0 +[c7ffbe20] [c02eb038] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02e6c18] can_rcv_filter+0x240/0x2e8 +[c7ffbe70] [c02e6d88] can_rcv+0xc8/0x140 +[c7ffbe90] [c026b664] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c026b8a8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0219908] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c026bbd8] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00356a4] __do_softirq+0x118/0x22c +[c7ffbff0] [c00126b4] call_do_softirq+0x14/0x24 +[c0445e60] [c00070b8] do_softirq+0x84/0xa8 +[c0445e80] [c00354e0] irq_exit+0x88/0xb4 +[c0445e90] [c00071bc] do_IRQ+0xe0/0x234 +[c0445ec0] [c0013384] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c0445f80] [c000b444] cpu_idle+0x68/0x10c (unreliable) +[c0445fa0] [c0003ec0] rest_init+0x9c/0xbc +[c0445fc0] [c03ed91c] start_kernel+0x2c0/0x2d8 +[c0445ff0] [00003438] 0x3438 + +** With "Spinlock debugging: sleep-inside-spinlock checking" +BUG: sleeping function called from invalid context at /home/wsh/projects/can-benchmark/kernel/2.6.36/mm/slab.c:3101 +in_atomic(): 1, irqs_disabled(): 0, pid: 379, name: cangw +Call Trace: +[c7abdb50] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7abdba0] [c02ffe54] dump_stack+0x2c/0x44 +[c7abdbb0] [c002157c] __might_sleep+0xfc/0x124 +[c7abdbc0] [c00c45bc] kmem_cache_alloc+0x15c/0x180 +[c7abdbf0] [c02d60d8] can_rx_register+0x78/0x210 +[c7abdc30] [c02d9ebc] cgw_create_job+0x1cc/0x220 +[c7abdc50] [c026c208] rtnetlink_rcv_msg+0x21c/0x28c +[c7abdc70] [c02762a4] netlink_rcv_skb+0xb8/0x100 +[c7abdc90] [c026bfd0] rtnetlink_rcv+0x40/0x5c +[c7abdcb0] [c0275e9c] netlink_unicast+0x320/0x368 +[c7abdd00] [c0276a0c] netlink_sendmsg+0x2e0/0x33c +[c7abdd50] [c0244cc0] sock_sendmsg+0x9c/0xd4 +[c7abde20] [c0247194] sys_sendto+0xcc/0x108 +[c7abdf00] [c0248980] sys_socketcall+0x17c/0x218 +[c7abdf40] [c0012524] ret_from_syscall+0x0/0x38 +--- Exception: c01 at 0xff3413c + LR = 0x10001f9c +BUG: spinlock bad magic on CPU#0, swapper/0 + lock: c798aabc, .magic: c0000000, .owner: /-1, .owner_cpu: -1069424200 +Call Trace: +[c7ffbd00] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbd50] [c02ffe54] dump_stack+0x2c/0x44 +[c7ffbd60] [c01afa50] spin_bug+0x84/0xd0 +[c7ffbd80] [c01afbfc] do_raw_spin_lock+0x3c/0x15c +[c7ffbdb0] [c02ff70c] _raw_spin_lock+0x34/0x4c +[c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428 +[c7ffbe00] [c02d630c] can_send+0x9c/0x1a0 +[c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d566c] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025a644] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +** First patch +diff --git a/net/can/gw.c b/net/can/gw.c +index 94ba3f1..7779ca6 100644 +--- a/net/can/gw.c ++++ b/net/can/gw.c +@@ -822,11 +822,14 @@ static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh, + if (gwj->dst.dev->type != ARPHRD_CAN) + goto put_src_dst_out; + +- spin_lock(&cgw_list_lock); + + err = cgw_register_filter(gwj); +- if (!err) +- hlist_add_head_rcu(&gwj->list, &cgw_list); ++ if (err) ++ goto put_src_dst_out; ++ ++ spin_lock(&cgw_list_lock); ++ ++ hlist_add_head_rcu(&gwj->list, &cgw_list); + + spin_unlock(&cgw_list_lock); + +** GFP_ATOMIC patch +diff --git a/net/can/af_can.c b/net/can/af_can.c +index 702be5a..b046ff0 100644 +--- a/net/can/af_can.c ++++ b/net/can/af_can.c +@@ -418,7 +418,7 @@ int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask, + if (dev && dev->type != ARPHRD_CAN) + return -ENODEV; + +- r = kmem_cache_alloc(rcv_cache, GFP_KERNEL); ++ r = kmem_cache_alloc(rcv_cache, GFP_ATOMIC); + if (!r) + return -ENOMEM; + +** Another panic +BUG: spinlock bad magic on CPU#0, swapper/0 + lock: c7986abc, .magic: c0000000, .owner: /-1, .owner_cpu: -1069424200 +Call Trace: +[c7ffbd00] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbd50] [c02ffe54] dump_stack+0x2c/0x44 +[c7ffbd60] [c01afa50] spin_bug+0x84/0xd0 +[c7ffbd80] [c01afbfc] do_raw_spin_lock+0x3c/0x15c +[c7ffbdb0] [c02ff70c] _raw_spin_lock+0x34/0x4c +[c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428 +[c7ffbe00] [c02d630c] can_send+0x9c/0x1a0 +[c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d566c] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025a644] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +Unrecoverable FP Unavailable Exception 801 at c7986ca0 +Oops: Unrecoverable FP Unavailable Exception, sig: 6 [#1] +PREEMPT Shark +last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev +Modules linked in: +NIP: c7986ca0 LR: c025bc3c CTR: c7986ca0 +REGS: c7ffbd20 TRAP: 0801 Not tainted (2.6.36.1-00006-g2e11adb-dirty) +MSR: 00009032 CR: 22002024 XER: 2000005f +TASK = c0411520[0] 'swapper' THREAD: c042e000 +GPR00: c7986ca0 c7ffbdd0 c0411520 c79b8240 c7986a60 00000010 c043b384 00004000 +GPR08: c043b788 00000000 00003fff c7ffbdd0 42002024 +NIP [c7986ca0] 0xc7986ca0 +LR [c025bc3c] dev_queue_xmit+0x104/0x428 +Call Trace: +[c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428 (unreliable) +[c7ffbe00] [c02d630c] can_send+0x9c/0x1a0 +[c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d566c] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025a644] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +Instruction dump: +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c7ffbc10] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbc60] [c02ffe54] dump_stack+0x2c/0x44 +[c7ffbc70] [c02fff28] panic+0xbc/0x200 +[c7ffbcd0] [c000faf8] die+0x1a4/0x1cc +[c7ffbcf0] [c000fc34] kernel_fp_unavailable_exception+0x4c/0x64 +[c7ffbd10] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 801 at 0xc7986ca0 + LR = dev_queue_xmit+0x104/0x428 +[c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428 (unreliable) +[c7ffbe00] [c02d630c] can_send+0x9c/0x1a0 +[c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d566c] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025a644] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 + +** After cansend can1 +BUG: spinlock bad magic on CPU#0, swapper/0 + lock: c7985abc, .magic: c0000000, .owner: /-1, .owner_cpu: -1069424200 +Call Trace: +[c7ffbd00] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbd50] [c0300434] dump_stack+0x2c/0x44 +[c7ffbd60] [c01afa50] spin_bug+0x84/0xd0 +[c7ffbd80] [c01afbfc] do_raw_spin_lock+0x3c/0x15c +[c7ffbdb0] [c02ffcec] _raw_spin_lock+0x34/0x4c +[c7ffbdd0] [c025c1a0] dev_queue_xmit+0xa4/0x428 +[c7ffbe00] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe20] [c02da27c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a8d8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208938] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +Unrecoverable FP Unavailable Exception 801 at c7985ca0 +Oops: Unrecoverable FP Unavailable Exception, sig: 6 [#1] +PREEMPT Shark +last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev +Modules linked in: +NIP: c7985ca0 LR: c025c200 CTR: c7985ca0 +REGS: c7ffbd20 TRAP: 0801 Not tainted (2.6.36.1-00011-gdb0ddb5) +MSR: 00009032 CR: 22002024 XER: 2000005f +TASK = c0411520[0] 'swapper' THREAD: c042e000 +GPR00: c7985ca0 c7ffbdd0 c0411520 c7a49e20 c7985a60 00000010 c043b384 00004000 +GPR08: c043b788 00000000 00003fff c7ffbdd0 42002024 +NIP [c7985ca0] 0xc7985ca0 +LR [c025c200] dev_queue_xmit+0x104/0x428 +Call Trace: +[c7ffbdd0] [c025c1a0] dev_queue_xmit+0xa4/0x428 (unreliable) +[c7ffbe00] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe20] [c02da27c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a8d8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208938] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +Instruction dump: +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c7ffbc10] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbc60] [c0300434] dump_stack+0x2c/0x44 +[c7ffbc70] [c0300508] panic+0xbc/0x200 +[c7ffbcd0] [c000faf8] die+0x1a4/0x1cc +[c7ffbcf0] [c000fc34] kernel_fp_unavailable_exception+0x4c/0x64 +[c7ffbd10] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 801 at 0xc7985ca0 + LR = dev_queue_xmit+0x104/0x428 +[c7ffbdd0] [c025c1a0] dev_queue_xmit+0xa4/0x428 (unreliable) +[c7ffbe00] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe20] [c02da27c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a8d8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208938] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +** After cansend can0 +BUG: spinlock bad magic on CPU#0, swapper/0 + lock: c7985abc, .magic: c0000000, .owner: /-1, .owner_cpu: -1069424200 +Call Trace: +[c7ffbd00] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbd50] [c0300434] dump_stack+0x2c/0x44 +[c7ffbd60] [c01afa50] spin_bug+0x84/0xd0 +[c7ffbd80] [c01afbfc] do_raw_spin_lock+0x3c/0x15c +[c7ffbdb0] [c02ffcec] _raw_spin_lock+0x34/0x4c +[c7ffbdd0] [c025c1a0] dev_queue_xmit+0xa4/0x428 +[c7ffbe00] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe20] [c02da27c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a8d8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208938] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +Unrecoverable FP Unavailable Exception 801 at c7985ca0 +Oops: Unrecoverable FP Unavailable Exception, sig: 6 [#1] +PREEMPT Shark +last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev +Modules linked in: +NIP: c7985ca0 LR: c025c200 CTR: c7985ca0 +REGS: c7ffbd20 TRAP: 0801 Not tainted (2.6.36.1-00011-gdb0ddb5) +MSR: 00009032 CR: 22002024 XER: 2000005f +TASK = c0411520[0] 'swapper' THREAD: c042e000 +GPR00: c7985ca0 c7ffbdd0 c0411520 c7a49e20 c7985a60 00000010 c043b384 00004000 +GPR08: c043b788 00000000 00003fff c7ffbdd0 42002024 +NIP [c7985ca0] 0xc7985ca0 +LR [c025c200] dev_queue_xmit+0x104/0x428 +Call Trace: +[c7ffbdd0] [c025c1a0] dev_queue_xmit+0xa4/0x428 (unreliable) +[c7ffbe00] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe20] [c02da27c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a8d8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208938] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 +Instruction dump: +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c7ffbc10] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbc60] [c0300434] dump_stack+0x2c/0x44 +[c7ffbc70] [c0300508] panic+0xbc/0x200 +[c7ffbcd0] [c000faf8] die+0x1a4/0x1cc +[c7ffbcf0] [c000fc34] kernel_fp_unavailable_exception+0x4c/0x64 +[c7ffbd10] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 801 at 0xc7985ca0 + LR = dev_queue_xmit+0x104/0x428 +[c7ffbdd0] [c025c1a0] dev_queue_xmit+0xa4/0x428 (unreliable) +[c7ffbe00] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe20] [c02da27c] can_can_gw_rcv+0x108/0x164 +[c7ffbe50] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbe70] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbe90] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbed0] [c025a8d8] netif_receive_skb+0x5c/0x98 +[c7ffbef0] [c0208938] mscan_rx_poll+0x1c0/0x454 +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c042fe60] [c0006d78] do_softirq+0x84/0xa8 +[c042fe80] [c00314cc] irq_exit+0x88/0xb4 +[c042fe90] [c0006efc] do_IRQ+0xe0/0x234 +[c042fec0] [c0012bbc] ret_from_except+0x0/0x14 +--- Exception: 501 at cpu_idle+0xfc/0x10c + LR = cpu_idle+0xfc/0x10c +[c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable) +[c042ffa0] [c0003ec0] rest_init+0x9c/0xbc +[c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8 +[c042fff0] [00003438] 0x3438 + +** After cangw with modifications -m ... +Unable to handle kernel paging request for data at address 0xdead4ead +Faulting instruction address: 0xc025c178 +Oops: Kernel access of bad area, sig: 11 [#1] +PREEMPT Shark +last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev +Modules linked in: +NIP: c025c178 LR: c025c130 CTR: c02d90c4 +REGS: c7ffbd70 TRAP: 0300 Not tainted (2.6.36.1-00005-gc63c5e8) +MSR: 00009032 CR: 40008284 XER: 0000005f +DAR: dead4ead, DSISR: 20000000 +TASK = c7a9ee10[369] 'cansend' THREAD: c7aca000 +GPR00: c7a31820 c7ffbe20 c7a9ee10 00000080 00000000 00000000 c7a4ef24 00000000 +GPR08: 00000000 00000002 00000001 c7ffbe20 40000282 10019f68 c042b0b0 00000001 +GPR16: c046da04 c042bcf0 c042bce0 c7ffa03c c0414924 c0432ac4 c0432ac0 c7abfc00 +GPR24: 00000000 c7a4eee0 c7a318a0 c7abf000 c7a37d24 c7a4eee0 dead4ead c7ffbe20 +NIP [c025c178] dev_queue_xmit+0x7c/0x428 +LR [c025c130] dev_queue_xmit+0x34/0x428 +Call Trace: +[c7ffbe20] [c025c130] dev_queue_xmit+0x34/0x428 (unreliable) +[c7ffbe50] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe70] [c02da288] can_can_gw_rcv+0x114/0x170 +[c7ffbea0] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbec0] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbee0] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbf20] [c025a7b8] process_backlog+0xb8/0x17c +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c7acbd60] [c0006d78] do_softirq+0x84/0xa8 +[c7acbd80] [c025b634] netif_rx_ni+0x6c/0x90 +[c7acbda0] [c02d691c] can_send+0xe8/0x1a0 +[c7acbdc0] [c02d7f80] raw_sendmsg+0xf4/0x168 +[c7acbdf0] [c0245cf8] sock_aio_write+0x104/0x134 +[c7acbe50] [c00c7848] do_sync_write+0xbc/0x110 +[c7acbef0] [c00c8638] vfs_write+0x170/0x190 +[c7acbf10] [c00c8778] sys_write+0x5c/0xa8 +[c7acbf40] [c0012524] ret_from_syscall+0x0/0x38 +--- Exception: c01 at 0xff23618 + LR = 0x1000094c +Instruction dump: +7fa4eb78 4e800421 801b01f0 7c7e1b78 5469043e 7f830040 54633032 409c01b4 +b13d0074 801b01e8 7f401a14 83da0004 <801e0000> 2f800000 419e0254 801e0078 +Kernel panic - not syncing: Fatal exception in interrupt +Call Trace: +[c7ffbc60] [c0009c04] show_stack+0xb0/0x1d4 (unreliable) +[c7ffbcb0] [c030043c] dump_stack+0x2c/0x44 +[c7ffbcc0] [c0300510] panic+0xbc/0x200 +[c7ffbd20] [c000faf8] die+0x1a4/0x1cc +[c7ffbd40] [c0014374] bad_page_fault+0x90/0xe0 +[c7ffbd60] [c00129c4] handle_page_fault+0x7c/0x80 +--- Exception: 300 at dev_queue_xmit+0x7c/0x428 + LR = dev_queue_xmit+0x34/0x428 +[c7ffbe50] [c02d68d0] can_send+0x9c/0x1a0 +[c7ffbe70] [c02da288] can_can_gw_rcv+0x114/0x170 +[c7ffbea0] [c02d5978] can_rcv_filter+0xf8/0x2e8 +[c7ffbec0] [c02d5c30] can_rcv+0xc8/0x140 +[c7ffbee0] [c025a694] __netif_receive_skb+0x2cc/0x338 +[c7ffbf20] [c025a7b8] process_backlog+0xb8/0x17c +[c7ffbf50] [c025ac08] net_rx_action+0x104/0x230 +[c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c +[c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24 +[c7acbd60] [c0006d78] do_softirq+0x84/0xa8 +[c7acbd80] [c025b634] netif_rx_ni+0x6c/0x90 +[c7acbda0] [c02d691c] can_send+0xe8/0x1a0 +[c7acbdc0] [c02d7f80] raw_sendmsg+0xf4/0x168 +[c7acbdf0] [c0245cf8] sock_aio_write+0x104/0x134 +[c7acbe50] [c00c7848] do_sync_write+0xbc/0x110 +[c7acbef0] [c00c8638] vfs_write+0x170/0x190 +[c7acbf10] [c00c8778] sys_write+0x5c/0xa8 +[c7acbf40] [c0012524] ret_from_syscall+0x0/0x38 +--- Exception: c01 at 0xff23618 + LR = 0x1000094c + +* write returns ENOBUFS +The reason is queuing discipline - the queue is full and +pfifo_fast_enqueue returns failure. This failure is propagated down to +qdisc_enqueue_root(), __dev_xmit_skb(), dev_queue_xmit() and +can_send() + +** See the follwing trace + +# tracer: function_graph +# +# CPU DURATION FUNCTION CALLS +# | | | | | | | + 1) | can_send() { + 1) | dev_queue_xmit() { + 1) | rt_spin_lock() { + 1) 0.894 us | __might_sleep(); + 1) 2.750 us | } + 1) | pfifo_fast_enqueue() { + 1) | kfree_skb() { + 1) | __kfree_skb() { + 1) | skb_release_head_state() { + 1) | sock_wfree() { + 1) | sock_def_write_space() { + 1) | rt_read_lock() { + 1) | __rt_spin_lock() { + 1) 0.677 us | __might_sleep(); + 1) 2.386 us | } + 1) 4.150 us | } + 1) | rt_read_unlock() { + 1) 0.918 us | __rt_spin_unlock(); + 1) 2.644 us | } + 1) 9.375 us | } + 1) + 10.999 us | } + 1) + 12.708 us | } + 1) | skb_release_data() { + 1) | kfree() { + 1) | _slab_irq_disable() { + 1) | rt_spin_lock() { + 1) 0.849 us | __might_sleep(); + 1) 2.588 us | } + 1) 4.242 us | } + 1) 0.864 us | __cache_free(); + 1) 0.888 us | rt_spin_unlock(); + 1) 9.456 us | } + 1) + 11.185 us | } + 1) | kmem_cache_free() { + 1) | _slab_irq_disable() { + 1) | rt_spin_lock() { + 1) 0.812 us | __might_sleep(); + 1) 2.542 us | } + 1) 4.240 us | } + 1) 0.813 us | __cache_free(); + 1) 0.894 us | rt_spin_unlock(); + 1) 9.329 us | } + 1) + 36.444 us | } + 1) + 38.136 us | } + 1) + 39.974 us | } + 1) | /* qdisc_enqueue_root = 1 */ + 1) | __qdisc_run() { + 1) | sch_direct_xmit() { + 1) 0.855 us | rt_spin_unlock(); + 1) | rt_spin_lock() { + 1) 0.827 us | __might_sleep(); + 1) 2.521 us | } + 1) | dev_hard_start_xmit() { + 1) | sja1000_start_xmit() { + 1) 1.646 us | kvaser_pci_write_reg(); + 1) 1.460 us | kvaser_pci_write_reg(); + 1) 1.691 us | kvaser_pci_write_reg(); + 1) 1.450 us | kvaser_pci_write_reg(); + 1) 1.416 us | kvaser_pci_write_reg(); + 1) | can_put_echo_skb() { + 1) | sock_wfree() { + 1) | sock_def_write_space() { + 1) | rt_read_lock() { + 1) | __rt_spin_lock() { + 1) 0.939 us | __might_sleep(); + 1) 2.699 us | } + 1) 4.337 us | } + 1) | rt_read_unlock() { + 1) 0.844 us | __rt_spin_unlock(); + 1) 2.507 us | } + 1) 9.242 us | } + 1) + 11.047 us | } + 1) + 12.791 us | } + 1) | sja1000_write_cmdreg() { + 1) | rt_spin_lock() { + 1) 0.802 us | __might_sleep(); + 1) 2.532 us | } + 1) 1.481 us | kvaser_pci_write_reg(); + 1) 2.155 us | kvaser_pci_read_reg(); + 1) 0.843 us | rt_spin_unlock(); + 1) + 11.100 us | } + 1) + 38.263 us | } + 1) | /* ops->ndo_start_xmit(skb, dev) = 0 */ + 1) + 41.508 us | } + 1) | /* dev_hard_start_xmit(skb, dev) = 0 */ + 1) 0.884 us | rt_spin_unlock(); + 1) | rt_spin_lock() { + 1) 0.817 us | __might_sleep(); + 1) 2.583 us | } + 1) | /* qdisc_len = 9 */ + 1) | /* sch_direct_xmit returns 0 */ + 1) + 57.502 us | } + 1) + 59.288 us | } + 1) 0.877 us | rt_spin_unlock(); + 1) | /* __dev_xmit_skb = 1 */ + 1) ! 111.265 us | } + 1) | /* dev_queue_xmit = 1 */ + 1) | /* net_xmit_errno = -105 */ + 1) 0.956 us | kfree_skb(); + 1) ! 117.340 us | } + 1) | /* write returned -1 */ + +** The trace was generated by kernel v2.6.33.7-rt29-4-g92487e4 with the following patch applied: + +diff --git a/net/can/af_can.c b/net/can/af_can.c +index 4d8479d7..c91968d 100644 +--- a/net/can/af_can.c ++++ b/net/can/af_can.c +@@ -344,8 +344,11 @@ int can_send(struct sk_buff *skb, int loop) + + /* send to netdevice */ + err = dev_queue_xmit(skb); +- if (err > 0) ++ trace_printk("dev_queue_xmit = %d\n", err); ++ if (err > 0) { + err = net_xmit_errno(err); ++ trace_printk("net_xmit_errno = %d\n", err); ++ } + + if (err) { + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17) +diff --git a/net/core/dev.c b/net/core/dev.c +index 7a5412e..10ca9b4 100644 +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -1828,6 +1828,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, + skb_dst_drop(skb); + + rc = ops->ndo_start_xmit(skb, dev); ++ trace_printk("ops->ndo_start_xmit(skb, dev) = %d\n", rc); ++ + if (rc == NETDEV_TX_OK) + txq_trans_update(txq); + /* +@@ -1854,6 +1856,7 @@ gso: + skb->next = nskb->next; + nskb->next = NULL; + rc = ops->ndo_start_xmit(nskb, dev); ++ trace_printk("gso: ops->ndo_start_xmit(skb, dev) = %d\n", rc); + if (unlikely(rc != NETDEV_TX_OK)) { + if (rc & ~NETDEV_TX_MASK) + goto out_kfree_gso_skb; +@@ -1949,6 +1952,8 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, + spin_lock(root_lock); + if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) { + kfree_skb(skb); ++ trace_printk("QDISC_STATE_DEACTIVATED\n"); ++ + rc = NET_XMIT_DROP; + } else if ((q->flags & TCQ_F_CAN_BYPASS) && !qdisc_qlen(q) && + !test_and_set_bit(__QDISC_STATE_RUNNING, &q->state)) { +@@ -1966,6 +1971,7 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q, + rc = NET_XMIT_SUCCESS; + } else { + rc = qdisc_enqueue_root(skb, q); ++ trace_printk("qdisc_enqueue_root = %d\n", rc); + qdisc_run(q); + } + spin_unlock(root_lock); +@@ -2047,6 +2053,7 @@ gso: + #endif + if (q->enqueue) { + rc = __dev_xmit_skb(skb, q, dev, txq); ++ trace_printk("__dev_xmit_skb = %d\n", rc); + goto out; + } + +@@ -2072,6 +2079,8 @@ gso: + + if (!netif_tx_queue_stopped(txq)) { + rc = dev_hard_start_xmit(skb, dev, txq); ++ trace_printk("dev_hard_start_xmit = %d\n", rc); ++ + if (dev_xmit_complete(rc)) { + HARD_TX_UNLOCK(dev, txq); + goto out; +diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c +index bf7f50e..aea0833 100644 +--- a/net/sched/sch_generic.c ++++ b/net/sched/sch_generic.c +@@ -125,6 +125,7 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, + HARD_TX_LOCK(dev, txq); + if (!netif_tx_queue_stopped(txq) && !netif_tx_queue_frozen(txq)) + ret = dev_hard_start_xmit(skb, dev, txq); ++ trace_printk("dev_hard_start_xmit(skb, dev) = %d\n", ret); + + HARD_TX_UNLOCK(dev, txq); + +@@ -133,9 +134,11 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, + if (dev_xmit_complete(ret)) { + /* Driver sent out skb successfully or skb was consumed */ + ret = qdisc_qlen(q); ++ trace_printk("qdisc_len = %d\n", ret); + } else if (ret == NETDEV_TX_LOCKED) { + /* Driver try lock failed */ + ret = handle_dev_cpu_collision(skb, txq, q); ++ trace_printk("handle_dev_cpu_collision = %d\n", ret); + } else { + /* Driver returned NETDEV_TX_BUSY - requeue skb */ + if (unlikely (ret != NETDEV_TX_BUSY && net_ratelimit())) +@@ -143,12 +146,13 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, + dev->name, ret, q->q.qlen); + + ret = dev_requeue_skb(skb, q); ++ trace_printk("dev_requeue_skb = %d\n", ret); + } + + if (ret && (netif_tx_queue_stopped(txq) || + netif_tx_queue_frozen(txq))) + ret = 0; +- ++ trace_printk("%s returns %d\n", __FUNCTION__, ret); + return ret; + } +