]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - doc/notes.org
Add additional kernel panic info
[can-benchmark.git] / doc / notes.org
index 7e09a10b47146463533d866de6d7826b5d51d49b..b27d6e202a514cbf6a46cba07b35d41289b294c0 100644 (file)
@@ -8,3 +8,485 @@
  set nfspath /srv/nfs/root-shark
  set bootcmd_tftpnfs_static 'tftp 800000 ${imagefile}; tftp 7f0000 ${devicetreefile}; set bootargs ${linux_console} root=/dev/nfs nfsroot=${serverip}:${nfspath} rw ip=${ipaddr}; mw f0000b00 ${psc_cfg}; bootm 800000 - 7f0000'
  set bootcmd 'run bootcmd_tftpnfs_static'
+
+* Questions
+** Why crc modification alone does not produce an error and is not returned by cangw -L? 
+* 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 <EE,ME,IR,DR>  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
+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 <EE,ME,IR,DR>  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 <dev_queue_xmit+0x230>
+        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 <add_preempt_count>
+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 <dev_queue_xmit+0x2a4>
+
+*** 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
+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 <EE,ME,IR,DR>  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
+
+* 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;
+ }