Re: [PATCH 0/1] HW checksum offload problem on Xilinx Zynq GEM
From: David Miller <davem@davemloft.net>
Date: 2016-08-19 19:28:43
From: Helmut Buchsbaum <redacted> Date: Fri, 19 Aug 2016 15:04:57 +0200
When working on upgrading the v3.x kernels of our embedded devices to more recent 4.x kernels we noticed some of our proprietary networking stuff is broken. Further investigations brought up an issue with small UDP packets (data payload <= 2), which contained wrong UDP header checksums. We tracked this down to commit 85ff3d87bf2ef1fadcde8553628c60f79806fdb4 net/macb: add TX checksum offload feature. It turns out that Zynq's GEM is obviously buggy regarding the UDP checksum calculation of such small UDP packets as long as the UDP checksum field is != 0 *BEFORE* the HW calulation. But since udp_send_skb() *ALWAYS* calculates the UDP header checksum (unless disabled via socket option), this is the usual case. Unfortunately it does not respect the net device feature setting which would leave UDP checksum untouched when checksum offloading is enabled.
Then simply clear the checksum field in the driver, or fix udp_send_skb() to do what you claim it is supposed to. That seems like a much more appropriate fix to me.