eth0: hw csum failure

Mathieu Malaterre mathieu.malaterre at gmail.com
Thu Jun 14 15:43:41 EDT 2018


I am trying to understand the following stacktrace in dmesg:

[   34.023281] eth0: hw csum failure
[   34.023438] CPU: 0 PID: 0 Comm: swapper Not tainted 4.17.0+ #2
[   34.023618] Call Trace:
[   34.023707] [dffedbd0] [c069ddac]
__skb_checksum_complete+0xf0/0x108 (unreliable)
[   34.023948] [dffedbf0] [c0777a70] tcp_v4_rcv+0x604/0xe00
[   34.024118] [dffedc70] [c0731624] ip_local_deliver_finish+0xa8/0x3c4
[   34.024315] [dffedcb0] [c0732430] ip_local_deliver+0xf0/0x154
[   34.024493] [dffedcf0] [c07328dc] ip_rcv+0x448/0x774
[   34.024653] [dffedd50] [c06aeae0] __netif_receive_skb_core+0x5e8/0x1184
[   34.024857] [dffedde0] [c06bba20] napi_gro_receive+0x160/0x22c
[   34.025044] [dffede10] [e14b2590] gem_poll+0x7fc/0x1ac0 [sungem]
[   34.025228] [dffedee0] [c06bacf0] net_rx_action+0x34c/0x618
[   34.025402] [dffedf60] [c07fd27c] __do_softirq+0x16c/0x5f0
[   34.025575] [dffedfd0] [c0064c7c] irq_exit+0x110/0x1a8
[   34.025738] [dffedff0] [c0016170] call_do_irq+0x24/0x3c
[   34.025903] [c0cf7e80] [c0009a84] do_IRQ+0x98/0x1a0
[   34.026055] [c0cf7eb0] [c001b474] ret_from_except+0x0/0x14
[   34.026225] --- interrupt: 501 at arch_cpu_idle+0x30/0x78
                   LR = arch_cpu_idle+0x30/0x78
[   34.026510] [c0cf7f70] [c0cf6000] 0xc0cf6000 (unreliable)
[   34.026682] [c0cf7f80] [c00a3868] do_idle+0xc4/0x158
[   34.026835] [c0cf7fb0] [c00a3ab0] cpu_startup_entry+0x20/0x28
[   34.027013] [c0cf7fc0] [c0998820] start_kernel+0x47c/0x490
[   34.027181] [c0cf7ff0] [00003444] 0x3444

If I decompile the kernel here is what I can find:

$ powerpc-linux-gnu-objdump -dS vmlinux > kernel.s
$ cat kernel.s
...
c077746c <tcp_v4_rcv>:
{
...
tcp_v4_send_reset(NULL, skb);
c0777a58: 7f e4 fb 78 mr      r4,r31
c0777a5c: 38 60 00 00 li      r3,0
c0777a60: 4b ff b3 01 bl      c0772d60 <tcp_v4_send_reset>
c0777a64: 4b ff fc 14 b       c0777678 <tcp_v4_rcv+0x20c>
csum = __skb_checksum_complete(skb);
c0777a68: 7f e3 fb 78 mr      r3,r31
c0777a6c: 4b f2 62 51 bl      c069dcbc <__skb_checksum_complete>
skb->csum_valid = !csum;
c0777a70: 81 5f 00 60 lwz     r10,96(r31)
if (skb_checksum_init(skb, IPPROTO_TCP, inet_compute_pseudo))
...

So the call to skb_checksum_init (0xc077746c+0x604) from tcp_v4_rcv is
producing the checksum error. What I fail to understand is how is that
going to help me track down the actual issue ?

Thanks
-- 
Mathieu



More information about the Kernelnewbies mailing list