Estou recebendo este kernel panic em mips executando linux. Eu tenho meu próprio dispositivo de rede chamado foodevice e, por vezes, no desligamento do dispositivo eu recebo esse erro. Eu percebi que algo no skb pode ser nulo, então estou tentando usar os comandos do gdb para me ajudar a identificar onde procurar.
CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == 8020913c, ra == 802090fc
[ 2685.740000] Oops[#1]:
[ 2685.740000] Cpu 0
[ 2685.740000] $ 0 : 00000000 00000000 00002000 8fad8600
[ 2685.740000] $ 4 : 000000e8 8e900441 00000004 00004305
[ 2685.740000] $ 8 : 8f95ffe0 0000dc00 00000000 8030e000
[ 2685.740000] $12 : 0000001f 001f0041 00000001 00480000
[ 2685.740000] $16 : 00000000 8faef780 8ea19000 8fad86e8
[ 2685.740000] $20 : 00000000 00000000 00000001 80310000
[ 2685.740000] $24 : 004812d8 800973cc
[ 2685.740000] $28 : 8f95e000 8f95fd68 00000040 802090fc
[ 2685.740000] Hi : 00000011
[ 2685.740000] Lo : 0000001b
[ 2685.740000] epc : 8020913c dev_queue_xmit+0x90/0x454
[ 2685.740000] Tainted: G O
[ 2685.740000] ra : 802090fc dev_queue_xmit+0x50/0x454
[ 2685.740000] Status: 1100dc03 KERNEL EXL IE
[ 2685.740000] Cause : 00800008
[ 2685.740000] BadVA : 00000000
[ 2685.740000] PrId : 00019750 (MIPS 74Kc)
[ 2685.740000] Modules linked in: batman_adv crc16 foodevice(O) antctl(O) rlp(O) xsysfs(O) sal(O) usb_storage cdc_acm ath79_)
[ 2685.740000] Process kworker/0:1 (pid: 237, threadinfo=8f95e000, task=8f8259e8, tls=00000000)
[ 2685.740000] Stack : 8f8259e8 803171b8 803171b8 80097408 8f95e000 8f95fda0 8f37e380 8faef798
[ 2685.740000] 8f37e380 00000000 00000000 8ea70f74 00000000 8f8259e8 803171b8 80294d7c
[ 2685.740000] 8faef780 8f37e380 8faef798 8f37e600 00000000 00000040 00000001 80310000
[ 2685.740000] 00000001 8ea714c0 00000000 8f939600 00000001 00000004 8f939628 801d5274
[ 2685.740000] 8f939800 8f37e380 8ea4ac00 00246742 8f389c00 80310000 00000000 8ea7b3e0
[ 2685.740000] ...
[ 2685.740000] Call Trace:
[ 2685.740000] [<8020913c>] dev_queue_xmit+0x90/0x454
[ 2685.740000] [<8ea70f74>] saDevUninit+0x398/0xf78 [foodevice]
[ 2685.740000]
[ 2685.740000]
[ 2685.740000] Code: 00839821 8e700004 a622007a <8e020000> 50400094 8e4200fc 8e22004c ae220018 8e050014
[ 2686.010000] ---[ end trace 0f2f0a8123e4bc82 ]---
[ 2686.020000] Kernel panic - not syncing: Fatal exception in interrupt
Então, eu acredito que estou procurando um ponteiro nulo em algum lugar, mas estou um pouco confuso quanto ao que está me dizendo.
fazendo (gdb) lista * 0x8020913c me dá:
0x8020913c is in dev_hard_start_xmit (net/core/dev.c:2207).
2202 * support DMA from it.
2203 */
2204 static inline int skb_needs_linearize(struct sk_buff *skb,
2205 int features)
2206 {
2207 return skb_is_nonlinear(skb) &&
2208 ((skb_has_frag_list(skb) &&
2209 !(features & NETIF_F_FRAGLIST)) ||
2210 (skb_shinfo(skb)->nr_frags &&
2211 !(features & NETIF_F_SG)));
Está me dizendo que skb_is_nonlinear falhou?
Tags kernel linux kernel-panic