]> rtime.felk.cvut.cz Git - can-benchmark.git/blob - doc/notes.org
Add more kernel panic information
[can-benchmark.git] / doc / notes.org
1 * uboot settings
2
3  set ipaddr 192.168.2.3
4  set netmask 255.255.255.0
5  set serverip 192.168.2.2 
6  set imagefile ryu/uImage
7  set devicetreefile ryu/shark-ryu.dtb
8  set nfspath /srv/nfs/root-shark
9  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'
10  set bootcmd 'run bootcmd_tftpnfs_static'
11
12 * Questions
13 ** Why crc modification alone does not produce an error and is not returned by cangw -L? 
14 * Kernel oops
15 ** Linux-2.6.33.7-00005-ge2f49b5 
16 Unable to handle kernel paging request for instruction fetch
17 Faulting instruction address: 0x8d56acc4
18 Oops: Kernel access of bad area, sig: 11 [#1]
19 PREEMPT Shark
20 Modules linked in:
21 NIP: 8d56acc4 LR: c0260208 CTR: 8d56acc7
22 REGS: c03f3bc0 TRAP: 0400   Not tainted  (2.6.33.7-00005-ge2f49b5)
23 MSR: 20009032 <EE,ME,IR,DR>  CR: 24008028  XER: 0000005f
24 TASK = c03d5478[0] 'swapper' THREAD: c03f2000
25 GPR00: 8d56acc7 c03f3c70 c03d5478 c7990160 c78d54ad 00000048 c79901a4 00000002 
26 GPR08: 000000e0 00000000 00000001 00000002 44000022 7f33ff4e 80000000 00000042 
27 GPR16: 00000008 20000000 c909e900 00000001 c03f3d78 c79326e0 00000008 c799dc1c 
28 GPR24: c7976800 c78d54f9 c7949828 c7a06620 c03f2000 c7990160 c78d54ad c03f3c70 
29 NIP [8d56acc4] 0x8d56acc4
30 LR [c0260208] dev_queue_xmit+0x2f0/0x588
31 Call Trace:
32 [c03f3c70] [c025ff74] dev_queue_xmit+0x5c/0x588 (unreliable)
33 [c03f3ca0] [c02d62d8] can_send+0x9c/0x1a0
34 [c03f3cc0] [c02d97a8] can_can_gw_rcv+0x108/0x164
35 [c03f3cf0] [c02d52ac] can_rcv_filter+0x240/0x2e8
36 [c03f3d10] [c02d541c] can_rcv+0xc8/0x140
37 [c03f3d30] [c025e968] netif_receive_skb+0x2ac/0x350
38 [c03f3d70] [c020a230] mscan_rx_poll+0x1c0/0x464
39 [c03f3dd0] [c025f428] net_rx_action+0x104/0x22c
40 [c03f3e20] [c00345e0] __do_softirq+0x10c/0x21c
41 [c03f3e70] [c00075d0] do_softirq+0x58/0x74
42 [c03f3e80] [c0034300] irq_exit+0x8c/0xbc
43 [c03f3e90] [c00076c8] do_IRQ+0xdc/0x188
44 [c03f3ec0] [c0014db0] ret_from_except+0x0/0x14
45 --- Exception: 501 at cpu_idle+0x104/0x114
46     LR = cpu_idle+0x104/0x114
47 [c03f3f80] [c000aefc] cpu_idle+0x68/0x114 (unreliable)
48 [c03f3fa0] [c0003f40] rest_init+0xa4/0xc4
49 [c03f3fc0] [c039f918] start_kernel+0x2e4/0x2fc
50 [c03f3ff0] [00003438] 0x3438
51 Instruction dump:
52 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 
53 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 
54 Kernel panic - not syncing: Fatal exception in interrupt
55 Call Trace:
56 [c03f3ab0] [c0009cdc] show_stack+0x70/0x1d4 (unreliable)
57 [c03f3b00] [c02ff5ec] dump_stack+0x2c/0x44
58 [c03f3b10] [c02ff6b0] panic+0xac/0x19c
59 [c03f3b60] [c0011df8] die+0x188/0x1a4
60 [c03f3b90] [c00165c8] bad_page_fault+0x90/0xe0
61 [c03f3bb0] [c0014bb8] handle_page_fault+0x7c/0x80
62 --- Exception: 400 at 0x8d56acc4
63     LR = dev_queue_xmit+0x2f0/0x588
64 [c03f3c70] [c025ff74] dev_queue_xmit+0x5c/0x588 (unreliable)
65 [c03f3ca0] [c02d62d8] can_send+0x9c/0x1a0
66 [c03f3cc0] [c02d97a8] can_can_gw_rcv+0x108/0x164
67 [c03f3cf0] [c02d52ac] can_rcv_filter+0x240/0x2e8
68 [c03f3d10] [c02d541c] can_rcv+0xc8/0x140
69 [c03f3d30] [c025e968] netif_receive_skb+0x2ac/0x350
70 [c03f3d70] [c020a230] mscan_rx_poll+0x1c0/0x464
71 [c03f3dd0] [c025f428] net_rx_action+0x104/0x22c
72 [c03f3e20] [c00345e0] __do_softirq+0x10c/0x21c
73 [c03f3e70] [c00075d0] do_softirq+0x58/0x74
74 [c03f3e80] [c0034300] irq_exit+0x8c/0xbc
75 [c03f3e90] [c00076c8] do_IRQ+0xdc/0x188
76 [c03f3ec0] [c0014db0] ret_from_except+0x0/0x14
77 --- Exception: 501 at cpu_idle+0x104/0x114
78     LR = cpu_idle+0x104/0x114
79 [c03f3f80] [c000aefc] cpu_idle+0x68/0x114 (unreliable)
80 [c03f3fa0] [c0003f40] rest_init+0xa4/0xc4
81 [c03f3fc0] [c039f918] start_kernel+0x2e4/0x2fc
82 [c03f3ff0] [00003438] 0x3438
83 Rebooting in 180 seconds..
84
85 ** Current kernel
86 Unable to handle kernel paging request for instruction fetch
87 Faulting instruction address: 0x8cd6acc4
88 Oops: Kernel access of bad area, sig: 11 [#1]
89 PREEMPT Shark
90 Modules linked in:
91 NIP: 8cd6acc4 LR: c025fdac CTR: 8cd6acc7
92 REGS: c03f3bd0 TRAP: 0400   Not tainted  (2.6.33.7-00005-ge2f49b5)
93 MSR: 20009032 <EE,ME,IR,DR>  CR: 22008028  XER: 0000005f
94 TASK = c03d6478[0] 'swapper' THREAD: c03f2000
95 GPR00: 8cd6acc7 c03f3c80 c03d6478 c79fec00 c78cd4ad 00000048 c79fec44 00000002 
96 GPR08: 000000e0 00000000 00000001 c03f3c80 42000022 7f33ff4e 80000000 00000042 
97 GPR16: 00000008 20000000 c909e900 00000001 c03f3d88 c79386e0 00000008 c79fe51c 
98 GPR24: 0000000c c78cd4f9 c7975800 c7949828 c7a33d24 c79fec00 c78cd4ad c03f3c80 
99 NIP [8cd6acc4] 0x8cd6acc4
100 LR [c025fdac] dev_queue_xmit+0xec/0x588
101 Call Trace:
102 [c03f3c80] [c025fd68] dev_queue_xmit+0xa8/0x588 (unreliable)
103 [c03f3cb0] [c02d5128] can_send+0x9c/0x1a0
104 [c03f3cd0] [c02d85ec] can_can_gw_rcv+0x108/0x164
105 [c03f3d00] [c02d3fdc] can_rcv_filter+0xf8/0x2e8
106 [c03f3d20] [c02d4294] can_rcv+0xc8/0x140
107 [c03f3d40] [c025e6f8] netif_receive_skb+0x2a8/0x34c
108 [c03f3d80] [c020a774] mscan_rx_poll+0x1c0/0x464
109 [c03f3de0] [c025f1b8] net_rx_action+0x104/0x238
110 [c03f3e30] [c00368c8] __do_softirq+0x128/0x244
111 [c03f3e80] [c00075e0] do_softirq+0x64/0x80
112 [c03f3e90] [c00365d0] irq_exit+0x98/0xc4
113 [c03f3ea0] [c00076d8] do_IRQ+0xdc/0x188
114 [c03f3ed0] [c0014d40] ret_from_except+0x0/0x14
115 [c03f3f90] [c000aed8] cpu_idle+0x68/0x10c (unreliable)
116 --- Exception: 501 at cpu_idle+0xfc/0x10c
117     LR = cpu_idle+0xfc/0x10c
118 [c03f3fb0] [c0003f34] rest_init+0x98/0xc4
119 [c03f3fc0] [c039f914] start_kernel+0x2e0/0x2f8
120 [c03f3ff0] [00003438] 0x3438
121 Instruction dump:
122 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 
123 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 
124 Kernel panic - not syncing: Fatal exception in interrupt
125 Call Trace:
126 [c03f3ac0] [c0009cc0] show_stack+0x70/0x1d4 (unreliable)
127 [c03f3b10] [c02fde74] dump_stack+0x2c/0x44
128 [c03f3b20] [c02fdf30] panic+0xa4/0x19c
129 [c03f3b70] [c0011d90] die+0x184/0x1a0
130 --- Exception: c03f3d88 at 0x42000022
131     LR = 0x8
132 [c03f3ba0] [c0016558] bad_page_fault+0x90/0xe0 (unreliable)
133 [c03f3bc0] [c0014b48] handle_page_fault+0x7c/0x80
134 --- Exception: 400 at 0x8cd6acc4
135     LR = dev_queue_xmit+0xec/0x588
136 [c03f3c80] [c025fd68] dev_queue_xmit+0xa8/0x588 (unreliable)
137 [c03f3cb0] [c02d5128] can_send+0x9c/0x1a0
138 [c03f3cd0] [c02d85ec] can_can_gw_rcv+0x108/0x164
139 [c03f3d00] [c02d3fdc] can_rcv_filter+0xf8/0x2e8
140 [c03f3d20] [c02d4294] can_rcv+0xc8/0x140
141 [c03f3d40] [c025e6f8] netif_receive_skb+0x2a8/0x34c
142 [c03f3d80] [c020a774] mscan_rx_poll+0x1c0/0x464
143 [c03f3de0] [c025f1b8] net_rx_action+0x104/0x238
144 [c03f3e30] [c00368c8] __do_softirq+0x128/0x244
145 [c03f3e80] [c00075e0] do_softirq+0x64/0x80
146 [c03f3e90] [c00365d0] irq_exit+0x98/0xc4
147 [c03f3ea0] [c00076d8] do_IRQ+0xdc/0x188
148 [c03f3ed0] [c0014d40] ret_from_except+0x0/0x14
149 --- Exception: 501 at cpu_idle+0xfc/0x10c
150     LR = cpu_idle+0xfc/0x10c
151 [c03f3f90] [c000aed8] cpu_idle+0x68/0x10c (unreliable)
152 [c03f3fb0] [c0003f34] rest_init+0x98/0xc4
153 [c03f3fc0] [c039f914] start_kernel+0x2e0/0x2f8
154 [c03f3ff0] [00003438] 0x3438
155
156
157 *** Disassemble
158         if (q->enqueue) {
159 c025fd54:       80 1e 00 00     lwz     r0,0(r30)
160 c025fd58:       2f 80 00 00     cmpwi   cr7,r0,0
161 c025fd5c:       41 9e 01 94     beq-    cr7,c025fef0 <dev_queue_xmit+0x230>
162         raw_spin_lock_init(&(_lock)->rlock);            \
163 } while (0)
164
165 static inline void spin_lock(spinlock_t *lock)
166 {
167         raw_spin_lock(&lock->rlock);
168 c025fd60:       38 60 00 01     li      r3,1
169 c025fd64:       4b dc 47 cd     bl      c0024530 <add_preempt_count>
170 c025fd68:       80 1e 00 4c     lwz     r0,76(r30) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
171 {
172         spinlock_t *root_lock = qdisc_lock(q);
173         int rc;
174
175         spin_lock(root_lock);
176         if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) {
177 c025fd6c:       3b 3e 00 4c     addi    r25,r30,76
178 c025fd70:       70 09 00 04     andi.   r9,r0,4
179 c025fd74:       40 82 01 f0     bne-    c025ff64 <dev_queue_xmit+0x2a4>
180
181 *** Corresponding C code
182 static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
183                                  struct net_device *dev,
184                                  struct netdev_queue *txq)
185 {
186         spinlock_t *root_lock = qdisc_lock(q);
187         int rc;
188
189         spin_lock(root_lock);
190
191 ** 2.6.36.1-00006-g2e11adb
192 Unable to handle kernel paging request for data at address 0xfffffffe
193 Faulting instruction address: 0xc0262358
194 Oops: Kernel access of bad area, sig: 11 [#1]
195 PREEMPT Shark
196 last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev
197 Modules linked in:
198 NIP: c0262358 LR: c026218c CTR: 00000000
199 REGS: c7ffbd20 TRAP: 0300   Not tainted  (2.6.36.1-00006-g2e11adb)
200 MSR: 00009032 <EE,ME,IR,DR>  CR: 42008024  XER: 0000005f
201 DAR: fffffffe, DSISR: 20000000
202 TASK = c03e44d0[0] 'swapper' THREAD: c0400000
203 GPR00: c7939560 c7ffbdd0 c03e44d0 00000100 00000000 00000060 c798bb64 00000000 
204 GPR08: 000000e8 00000002 00000001 00000002 42000022 7f33ff4e 80000000 00000042 
205 GPR16: 00000008 20000000 c909e900 00000001 c7ffbef8 c0404a84 c0404a80 c78b4000 
206 GPR24: 00000000 c798bb20 c79395c0 c7a77e20 c796f800 c798bb20 fffffffe c7ffbdd0 
207 NIP [c0262358] dev_queue_xmit+0x200/0x4f0
208 LR [c026218c] dev_queue_xmit+0x34/0x4f0
209 Call Trace:
210 [c7ffbdd0] [c026218c] dev_queue_xmit+0x34/0x4f0 (unreliable)
211 [c7ffbe00] [c02dd1f4] can_send+0x9c/0x1a0
212 [c7ffbe20] [c02e07a8] can_can_gw_rcv+0x108/0x164
213 [c7ffbe50] [c02dc224] can_rcv_filter+0xf8/0x2e8
214 [c7ffbe70] [c02dc4dc] can_rcv+0xc8/0x140
215 [c7ffbe90] [c02606f0] __netif_receive_skb+0x2cc/0x338
216 [c7ffbed0] [c0260934] netif_receive_skb+0x5c/0x98
217 [c7ffbef0] [c020d72c] mscan_rx_poll+0x1c0/0x454
218 [c7ffbf50] [c0260c64] net_rx_action+0x104/0x230
219 [c7ffbfa0] [c0031350] __do_softirq+0x118/0x22c
220 [c7ffbff0] [c0011704] call_do_softirq+0x14/0x24
221 [c0401e60] [c0006bdc] do_softirq+0x84/0xa8
222 [c0401e80] [c0031074] irq_exit+0x88/0xb4
223 [c0401e90] [c0006d60] do_IRQ+0xe0/0x234
224 [c0401ec0] [c00123d4] ret_from_except+0x0/0x14
225 --- Exception: 501 at cpu_idle+0xfc/0x10c
226     LR = cpu_idle+0xfc/0x10c
227 [c0401f80] [c000a7a8] cpu_idle+0x68/0x10c (unreliable)
228 [c0401fa0] [c0003ec0] rest_init+0x9c/0xbc
229 [c0401fc0] [c03ad91c] start_kernel+0x2c0/0x2d8
230 [c0401ff0] [00003438] 0x3438
231 Instruction dump:
232 41920198 817e000c 2f8b0000 419c018c 55693032 55602036 7ca04850 5569043e 
233 b13d0074 801c01c8 7f402a14 83da0004 <801e0000> 2f800000 409efe88 801c00d8 
234 Kernel panic - not syncing: Fatal exception in interrupt
235 Call Trace:
236 [c7ffbc00] [c00095dc] show_stack+0xb0/0x1d4 (unreliable)
237 [c7ffbc50] [c030664c] dump_stack+0x2c/0x44
238 [c7ffbc60] [c0306720] panic+0xbc/0x1fc
239 [c7ffbcc0] [c000f34c] die+0x1b8/0x1e8
240 --- Exception: c7ffbef8 at 0x42000022
241     LR = 0x8
242 [c7ffbcf0] [c0013b8c] bad_page_fault+0x90/0xe0 (unreliable)
243 [c7ffbd10] [c00121dc] handle_page_fault+0x7c/0x80
244 --- Exception: 300 at dev_queue_xmit+0x200/0x4f0
245     LR = dev_queue_xmit+0x34/0x4f0
246 [c7ffbe00] [c02dd1f4] can_send+0x9c/0x1a0
247 [c7ffbe20] [c02e07a8] can_can_gw_rcv+0x108/0x164
248 [c7ffbe50] [c02dc224] can_rcv_filter+0xf8/0x2e8
249 [c7ffbe70] [c02dc4dc] can_rcv+0xc8/0x140
250 [c7ffbe90] [c02606f0] __netif_receive_skb+0x2cc/0x338
251 [c7ffbed0] [c0260934] netif_receive_skb+0x5c/0x98
252 [c7ffbef0] [c020d72c] mscan_rx_poll+0x1c0/0x454
253 [c7ffbf50] [c0260c64] net_rx_action+0x104/0x230
254 [c7ffbfa0] [c0031350] __do_softirq+0x118/0x22c
255 [c7ffbff0] [c0011704] call_do_softirq+0x14/0x24
256 [c0401e60] [c0006bdc] do_softirq+0x84/0xa8
257 [c0401e80] [c0031074] irq_exit+0x88/0xb4
258 [c0401e90] [c0006d60] do_IRQ+0xe0/0x234
259 [c0401ec0] [c00123d4] ret_from_except+0x0/0x14
260 --- Exception: 501 at cpu_idle+0xfc/0x10c
261     LR = cpu_idle+0xfc/0x10c
262 [c0401f80] [c000a7a8] cpu_idle+0x68/0x10c (unreliable)
263 [c0401fa0] [c0003ec0] rest_init+0x9c/0xbc
264 [c0401fc0] [c03ad91c] start_kernel+0x2c0/0x2d8
265 [c0401ff0] [00003438] 0x3438
266
267 ** With "Spinlock and rw-lock debugging: basic checks" 
268 BUG: spinlock bad magic on CPU#0, swapper/0
269  lock: c7985abc, .magic: c0000000, .owner: <none>/-1, .owner_cpu: -1069448776
270
271
272 ** With "Spinlock debugging: sleep-inside-spinlock checking"
273 BUG: sleeping function called from invalid context at /home/wsh/projects/can-benchmark/kernel/2.6.36/mm/slab.c:3101
274 in_atomic(): 1, irqs_disabled(): 0, pid: 379, name: cangw
275 Call Trace:
276 [c7abdb50] [c0009c04] show_stack+0xb0/0x1d4 (unreliable)
277 [c7abdba0] [c02ffe54] dump_stack+0x2c/0x44
278 [c7abdbb0] [c002157c] __might_sleep+0xfc/0x124
279 [c7abdbc0] [c00c45bc] kmem_cache_alloc+0x15c/0x180
280 [c7abdbf0] [c02d60d8] can_rx_register+0x78/0x210
281 [c7abdc30] [c02d9ebc] cgw_create_job+0x1cc/0x220
282 [c7abdc50] [c026c208] rtnetlink_rcv_msg+0x21c/0x28c
283 [c7abdc70] [c02762a4] netlink_rcv_skb+0xb8/0x100
284 [c7abdc90] [c026bfd0] rtnetlink_rcv+0x40/0x5c
285 [c7abdcb0] [c0275e9c] netlink_unicast+0x320/0x368
286 [c7abdd00] [c0276a0c] netlink_sendmsg+0x2e0/0x33c
287 [c7abdd50] [c0244cc0] sock_sendmsg+0x9c/0xd4
288 [c7abde20] [c0247194] sys_sendto+0xcc/0x108
289 [c7abdf00] [c0248980] sys_socketcall+0x17c/0x218
290 [c7abdf40] [c0012524] ret_from_syscall+0x0/0x38
291 --- Exception: c01 at 0xff3413c
292     LR = 0x10001f9c
293 BUG: spinlock bad magic on CPU#0, swapper/0
294  lock: c798aabc, .magic: c0000000, .owner: <none>/-1, .owner_cpu: -1069424200
295 Call Trace:
296 [c7ffbd00] [c0009c04] show_stack+0xb0/0x1d4 (unreliable)
297 [c7ffbd50] [c02ffe54] dump_stack+0x2c/0x44
298 [c7ffbd60] [c01afa50] spin_bug+0x84/0xd0
299 [c7ffbd80] [c01afbfc] do_raw_spin_lock+0x3c/0x15c
300 [c7ffbdb0] [c02ff70c] _raw_spin_lock+0x34/0x4c
301 [c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428
302 [c7ffbe00] [c02d630c] can_send+0x9c/0x1a0
303 [c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164
304 [c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8
305 [c7ffbe70] [c02d566c] can_rcv+0xc8/0x140
306 [c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338
307 [c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98
308 [c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454
309 [c7ffbf50] [c025a644] net_rx_action+0x104/0x230
310 [c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c
311 [c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24
312 [c042fe60] [c0006d78] do_softirq+0x84/0xa8
313 [c042fe80] [c00314cc] irq_exit+0x88/0xb4
314 [c042fe90] [c0006efc] do_IRQ+0xe0/0x234
315 [c042fec0] [c0012bbc] ret_from_except+0x0/0x14
316 --- Exception: 501 at cpu_idle+0xfc/0x10c
317     LR = cpu_idle+0xfc/0x10c
318 [c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable)
319 [c042ffa0] [c0003ec0] rest_init+0x9c/0xbc
320 [c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8
321 [c042fff0] [00003438] 0x3438
322 ** First patch
323 diff --git a/net/can/gw.c b/net/can/gw.c
324 index 94ba3f1..7779ca6 100644
325 --- a/net/can/gw.c
326 +++ b/net/can/gw.c
327 @@ -822,11 +822,14 @@ static int cgw_create_job(struct sk_buff *skb,  struct nlmsghdr *nlh,
328         if (gwj->dst.dev->type != ARPHRD_CAN)
329                 goto put_src_dst_out;
330                 
331 -       spin_lock(&cgw_list_lock);
332  
333         err = cgw_register_filter(gwj);
334 -       if (!err)
335 -               hlist_add_head_rcu(&gwj->list, &cgw_list);
336 +       if (err)
337 +               goto put_src_dst_out;
338 +
339 +       spin_lock(&cgw_list_lock);
340 +
341 +       hlist_add_head_rcu(&gwj->list, &cgw_list);
342  
343         spin_unlock(&cgw_list_lock);
344  
345 ** GFP_ATOMIC patch
346 diff --git a/net/can/af_can.c b/net/can/af_can.c
347 index 702be5a..b046ff0 100644
348 --- a/net/can/af_can.c
349 +++ b/net/can/af_can.c
350 @@ -418,7 +418,7 @@ int can_rx_register(struct net_device *dev, canid_t can_id, canid_t mask,
351         if (dev && dev->type != ARPHRD_CAN)
352                 return -ENODEV;
353  
354 -       r = kmem_cache_alloc(rcv_cache, GFP_KERNEL);
355 +       r = kmem_cache_alloc(rcv_cache, GFP_ATOMIC);
356         if (!r)
357                 return -ENOMEM;
358  
359
360         
361 ** Another panic
362 BUG: spinlock bad magic on CPU#0, swapper/0
363  lock: c7986abc, .magic: c0000000, .owner: <none>/-1, .owner_cpu: -1069424200
364 Call Trace:
365 [c7ffbd00] [c0009c04] show_stack+0xb0/0x1d4 (unreliable)
366 [c7ffbd50] [c02ffe54] dump_stack+0x2c/0x44
367 [c7ffbd60] [c01afa50] spin_bug+0x84/0xd0
368 [c7ffbd80] [c01afbfc] do_raw_spin_lock+0x3c/0x15c
369 [c7ffbdb0] [c02ff70c] _raw_spin_lock+0x34/0x4c
370 [c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428
371 [c7ffbe00] [c02d630c] can_send+0x9c/0x1a0
372 [c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164
373 [c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8
374 [c7ffbe70] [c02d566c] can_rcv+0xc8/0x140
375 [c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338
376 [c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98
377 [c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454
378 [c7ffbf50] [c025a644] net_rx_action+0x104/0x230
379 [c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c
380 [c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24
381 [c042fe60] [c0006d78] do_softirq+0x84/0xa8
382 [c042fe80] [c00314cc] irq_exit+0x88/0xb4
383 [c042fe90] [c0006efc] do_IRQ+0xe0/0x234
384 [c042fec0] [c0012bbc] ret_from_except+0x0/0x14
385 --- Exception: 501 at cpu_idle+0xfc/0x10c
386     LR = cpu_idle+0xfc/0x10c
387 [c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable)
388 [c042ffa0] [c0003ec0] rest_init+0x9c/0xbc
389 [c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8
390 [c042fff0] [00003438] 0x3438
391 Unrecoverable FP Unavailable Exception 801 at c7986ca0
392 Oops: Unrecoverable FP Unavailable Exception, sig: 6 [#1]
393 PREEMPT Shark
394 last sysfs file: /sys/devices/lpb.0/fc000000.flash/mtd/mtd2ro/dev
395 Modules linked in:
396 NIP: c7986ca0 LR: c025bc3c CTR: c7986ca0
397 REGS: c7ffbd20 TRAP: 0801   Not tainted  (2.6.36.1-00006-g2e11adb-dirty)
398 MSR: 00009032 <EE,ME,IR,DR>  CR: 22002024  XER: 2000005f
399 TASK = c0411520[0] 'swapper' THREAD: c042e000
400 GPR00: c7986ca0 c7ffbdd0 c0411520 c79b8240 c7986a60 00000010 c043b384 00004000 
401 GPR08: c043b788 00000000 00003fff c7ffbdd0 42002024 
402 NIP [c7986ca0] 0xc7986ca0
403 LR [c025bc3c] dev_queue_xmit+0x104/0x428
404 Call Trace:
405 [c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428 (unreliable)
406 [c7ffbe00] [c02d630c] can_send+0x9c/0x1a0
407 [c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164
408 [c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8
409 [c7ffbe70] [c02d566c] can_rcv+0xc8/0x140
410 [c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338
411 [c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98
412 [c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454
413 [c7ffbf50] [c025a644] net_rx_action+0x104/0x230
414 [c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c
415 [c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24
416 [c042fe60] [c0006d78] do_softirq+0x84/0xa8
417 [c042fe80] [c00314cc] irq_exit+0x88/0xb4
418 [c042fe90] [c0006efc] do_IRQ+0xe0/0x234
419 [c042fec0] [c0012bbc] ret_from_except+0x0/0x14
420 --- Exception: 501 at cpu_idle+0xfc/0x10c
421     LR = cpu_idle+0xfc/0x10c
422 [c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable)
423 [c042ffa0] [c0003ec0] rest_init+0x9c/0xbc
424 [c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8
425 [c042fff0] [00003438] 0x3438
426 Instruction dump:
427 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 
428 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX 
429 Kernel panic - not syncing: Fatal exception in interrupt
430 Call Trace:
431 [c7ffbc10] [c0009c04] show_stack+0xb0/0x1d4 (unreliable)
432 [c7ffbc60] [c02ffe54] dump_stack+0x2c/0x44
433 [c7ffbc70] [c02fff28] panic+0xbc/0x200
434 [c7ffbcd0] [c000faf8] die+0x1a4/0x1cc
435 [c7ffbcf0] [c000fc34] kernel_fp_unavailable_exception+0x4c/0x64
436 [c7ffbd10] [c0012bbc] ret_from_except+0x0/0x14
437 --- Exception: 801 at 0xc7986ca0
438     LR = dev_queue_xmit+0x104/0x428
439 [c7ffbdd0] [c025bbdc] dev_queue_xmit+0xa4/0x428 (unreliable)
440 [c7ffbe00] [c02d630c] can_send+0x9c/0x1a0
441 [c7ffbe20] [c02d991c] can_can_gw_rcv+0x108/0x164
442 [c7ffbe50] [c02d53b4] can_rcv_filter+0xf8/0x2e8
443 [c7ffbe70] [c02d566c] can_rcv+0xc8/0x140
444 [c7ffbe90] [c025a0d0] __netif_receive_skb+0x2cc/0x338
445 [c7ffbed0] [c025a314] netif_receive_skb+0x5c/0x98
446 [c7ffbef0] [c0208374] mscan_rx_poll+0x1c0/0x454
447 [c7ffbf50] [c025a644] net_rx_action+0x104/0x230
448 [c7ffbfa0] [c00317a8] __do_softirq+0x118/0x22c
449 [c7ffbff0] [c0011eec] call_do_softirq+0x14/0x24
450 [c042fe60] [c0006d78] do_softirq+0x84/0xa8
451 [c042fe80] [c00314cc] irq_exit+0x88/0xb4
452 [c042fe90] [c0006efc] do_IRQ+0xe0/0x234
453 [c042fec0] [c0012bbc] ret_from_except+0x0/0x14
454 --- Exception: 501 at cpu_idle+0xfc/0x10c
455     LR = cpu_idle+0xfc/0x10c
456 [c042ff80] [c000afb8] cpu_idle+0x68/0x10c (unreliable)
457 [c042ffa0] [c0003ec0] rest_init+0x9c/0xbc
458 [c042ffc0] [c03da91c] start_kernel+0x2c0/0x2d8
459 [c042fff0] [00003438] 0x3438
460  
461
462 * write returns ENOBUFS
463 The reason is queuing discipline - the queue is full and
464 pfifo_fast_enqueue returns failure. This failure is propagated down to
465 qdisc_enqueue_root(), __dev_xmit_skb(), dev_queue_xmit() and
466 can_send()
467
468 ** See the follwing trace
469
470 # tracer: function_graph
471 #
472 # CPU  DURATION                  FUNCTION CALLS
473 # |     |   |                     |   |   |   |
474  1)               |  can_send() {
475  1)               |    dev_queue_xmit() {
476  1)               |      rt_spin_lock() {
477  1)   0.894 us    |        __might_sleep();
478  1)   2.750 us    |      }
479  1)               |      pfifo_fast_enqueue() {
480  1)               |        kfree_skb() {
481  1)               |          __kfree_skb() {
482  1)               |            skb_release_head_state() {
483  1)               |              sock_wfree() {
484  1)               |                sock_def_write_space() {
485  1)               |                  rt_read_lock() {
486  1)               |                    __rt_spin_lock() {
487  1)   0.677 us    |                      __might_sleep();
488  1)   2.386 us    |                    }
489  1)   4.150 us    |                  }
490  1)               |                  rt_read_unlock() {
491  1)   0.918 us    |                    __rt_spin_unlock();
492  1)   2.644 us    |                  }
493  1)   9.375 us    |                }
494  1) + 10.999 us   |              }
495  1) + 12.708 us   |            }
496  1)               |            skb_release_data() {
497  1)               |              kfree() {
498  1)               |                _slab_irq_disable() {
499  1)               |                  rt_spin_lock() {
500  1)   0.849 us    |                    __might_sleep();
501  1)   2.588 us    |                  }
502  1)   4.242 us    |                }
503  1)   0.864 us    |                __cache_free();
504  1)   0.888 us    |                rt_spin_unlock();
505  1)   9.456 us    |              }
506  1) + 11.185 us   |            }
507  1)               |            kmem_cache_free() {
508  1)               |              _slab_irq_disable() {
509  1)               |                rt_spin_lock() {
510  1)   0.812 us    |                  __might_sleep();
511  1)   2.542 us    |                }
512  1)   4.240 us    |              }
513  1)   0.813 us    |              __cache_free();
514  1)   0.894 us    |              rt_spin_unlock();
515  1)   9.329 us    |            }
516  1) + 36.444 us   |          }
517  1) + 38.136 us   |        }
518  1) + 39.974 us   |      }
519  1)               |      /* qdisc_enqueue_root = 1 */
520  1)               |      __qdisc_run() {
521  1)               |        sch_direct_xmit() {
522  1)   0.855 us    |          rt_spin_unlock();
523  1)               |          rt_spin_lock() {
524  1)   0.827 us    |            __might_sleep();
525  1)   2.521 us    |          }
526  1)               |          dev_hard_start_xmit() {
527  1)               |            sja1000_start_xmit() {
528  1)   1.646 us    |              kvaser_pci_write_reg();
529  1)   1.460 us    |              kvaser_pci_write_reg();
530  1)   1.691 us    |              kvaser_pci_write_reg();
531  1)   1.450 us    |              kvaser_pci_write_reg();
532  1)   1.416 us    |              kvaser_pci_write_reg();
533  1)               |              can_put_echo_skb() {
534  1)               |                sock_wfree() {
535  1)               |                  sock_def_write_space() {
536  1)               |                    rt_read_lock() {
537  1)               |                      __rt_spin_lock() {
538  1)   0.939 us    |                        __might_sleep();
539  1)   2.699 us    |                      }
540  1)   4.337 us    |                    }
541  1)               |                    rt_read_unlock() {
542  1)   0.844 us    |                      __rt_spin_unlock();
543  1)   2.507 us    |                    }
544  1)   9.242 us    |                  }
545  1) + 11.047 us   |                }
546  1) + 12.791 us   |              }
547  1)               |              sja1000_write_cmdreg() {
548  1)               |                rt_spin_lock() {
549  1)   0.802 us    |                  __might_sleep();
550  1)   2.532 us    |                }
551  1)   1.481 us    |                kvaser_pci_write_reg();
552  1)   2.155 us    |                kvaser_pci_read_reg();
553  1)   0.843 us    |                rt_spin_unlock();
554  1) + 11.100 us   |              }
555  1) + 38.263 us   |            }
556  1)               |            /* ops->ndo_start_xmit(skb, dev) = 0 */
557  1) + 41.508 us   |          }
558  1)               |          /* dev_hard_start_xmit(skb, dev) = 0 */
559  1)   0.884 us    |          rt_spin_unlock();
560  1)               |          rt_spin_lock() {
561  1)   0.817 us    |            __might_sleep();
562  1)   2.583 us    |          }
563  1)               |          /* qdisc_len = 9 */
564  1)               |          /* sch_direct_xmit returns 0 */
565  1) + 57.502 us   |        }
566  1) + 59.288 us   |      }
567  1)   0.877 us    |      rt_spin_unlock();
568  1)               |      /* __dev_xmit_skb = 1 */
569  1) ! 111.265 us  |    }
570  1)               |  /* dev_queue_xmit = 1 */
571  1)               |  /* net_xmit_errno = -105 */
572  1)   0.956 us    |    kfree_skb();
573  1) ! 117.340 us  |  }
574  1)               |  /* write returned -1 */
575
576 ** The trace was generated by kernel v2.6.33.7-rt29-4-g92487e4 with the following patch applied:
577
578 diff --git a/net/can/af_can.c b/net/can/af_can.c
579 index 4d8479d7..c91968d 100644
580 --- a/net/can/af_can.c
581 +++ b/net/can/af_can.c
582 @@ -344,8 +344,11 @@ int can_send(struct sk_buff *skb, int loop)
583  
584         /* send to netdevice */
585         err = dev_queue_xmit(skb);
586 -       if (err > 0)
587 +       trace_printk("dev_queue_xmit = %d\n", err);
588 +       if (err > 0) {
589                 err = net_xmit_errno(err);
590 +               trace_printk("net_xmit_errno = %d\n", err);
591 +       }
592  
593         if (err) {
594  #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
595 diff --git a/net/core/dev.c b/net/core/dev.c
596 index 7a5412e..10ca9b4 100644
597 --- a/net/core/dev.c
598 +++ b/net/core/dev.c
599 @@ -1828,6 +1828,8 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
600                         skb_dst_drop(skb);
601  
602                 rc = ops->ndo_start_xmit(skb, dev);
603 +               trace_printk("ops->ndo_start_xmit(skb, dev) = %d\n", rc);
604 +
605                 if (rc == NETDEV_TX_OK)
606                         txq_trans_update(txq);
607                 /*
608 @@ -1854,6 +1856,7 @@ gso:
609                 skb->next = nskb->next;
610                 nskb->next = NULL;
611                 rc = ops->ndo_start_xmit(nskb, dev);
612 +               trace_printk("gso: ops->ndo_start_xmit(skb, dev) = %d\n", rc);
613                 if (unlikely(rc != NETDEV_TX_OK)) {
614                         if (rc & ~NETDEV_TX_MASK)
615                                 goto out_kfree_gso_skb;
616 @@ -1949,6 +1952,8 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
617         spin_lock(root_lock);
618         if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) {
619                 kfree_skb(skb);
620 +               trace_printk("QDISC_STATE_DEACTIVATED\n");
621 +
622                 rc = NET_XMIT_DROP;
623         } else if ((q->flags & TCQ_F_CAN_BYPASS) && !qdisc_qlen(q) &&
624                    !test_and_set_bit(__QDISC_STATE_RUNNING, &q->state)) {
625 @@ -1966,6 +1971,7 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
626                 rc = NET_XMIT_SUCCESS;
627         } else {
628                 rc = qdisc_enqueue_root(skb, q);
629 +               trace_printk("qdisc_enqueue_root = %d\n", rc);
630                 qdisc_run(q);
631         }
632         spin_unlock(root_lock);
633 @@ -2047,6 +2053,7 @@ gso:
634  #endif
635         if (q->enqueue) {
636                 rc = __dev_xmit_skb(skb, q, dev, txq);
637 +               trace_printk("__dev_xmit_skb = %d\n", rc);
638                 goto out;
639         }
640  
641 @@ -2072,6 +2079,8 @@ gso:
642  
643                         if (!netif_tx_queue_stopped(txq)) {
644                                 rc = dev_hard_start_xmit(skb, dev, txq);
645 +                               trace_printk("dev_hard_start_xmit = %d\n", rc);
646 +
647                                 if (dev_xmit_complete(rc)) {
648                                         HARD_TX_UNLOCK(dev, txq);
649                                         goto out;
650 diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
651 index bf7f50e..aea0833 100644
652 --- a/net/sched/sch_generic.c
653 +++ b/net/sched/sch_generic.c
654 @@ -125,6 +125,7 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
655         HARD_TX_LOCK(dev, txq);
656         if (!netif_tx_queue_stopped(txq) && !netif_tx_queue_frozen(txq))
657                 ret = dev_hard_start_xmit(skb, dev, txq);
658 +       trace_printk("dev_hard_start_xmit(skb, dev) = %d\n", ret);
659  
660         HARD_TX_UNLOCK(dev, txq);
661  
662 @@ -133,9 +134,11 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
663         if (dev_xmit_complete(ret)) {
664                 /* Driver sent out skb successfully or skb was consumed */
665                 ret = qdisc_qlen(q);
666 +               trace_printk("qdisc_len = %d\n", ret);
667         } else if (ret == NETDEV_TX_LOCKED) {
668                 /* Driver try lock failed */
669                 ret = handle_dev_cpu_collision(skb, txq, q);
670 +               trace_printk("handle_dev_cpu_collision = %d\n", ret);
671         } else {
672                 /* Driver returned NETDEV_TX_BUSY - requeue skb */
673                 if (unlikely (ret != NETDEV_TX_BUSY && net_ratelimit()))
674 @@ -143,12 +146,13 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
675                                dev->name, ret, q->q.qlen);
676  
677                 ret = dev_requeue_skb(skb, q);
678 +               trace_printk("dev_requeue_skb = %d\n", ret);
679         }
680  
681         if (ret && (netif_tx_queue_stopped(txq) ||
682                     netif_tx_queue_frozen(txq)))
683                 ret = 0;
684 -
685 +       trace_printk("%s returns %d\n", __FUNCTION__, ret);
686         return ret;
687  }
688