Re: [PATCH 0/1] HW checksum offload problem on Xilinx Zynq GEM
From: Helmut Buchsbaum <hidden>
Date: 2016-08-23 05:39:04
On 08/19/2016 10:00 PM, Tom Herbert wrote:
On Fri, Aug 19, 2016 at 12:28 PM, David Miller [off-list ref] wrote:quoted
From: Helmut Buchsbaum <redacted> Date: Fri, 19 Aug 2016 15:04:57 +0200quoted
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.Fix the driver to do that. When offloading a UDP checksum the pseudo header checksum is written into the checksum field-- that's the interface that everyone else has been using without issue.
Thanks for pointing me in the right direction. I'm just verifying a patch update I'll provide soon!