Re: [PATCH] flow-dissector: Fix alignment issue in __skb_flow_get_ports
From: Alexander Duyck <hidden>
Date: 2014-10-10 16:50:23
On 10/10/2014 08:29 AM, Eric Dumazet wrote:
On Fri, 2014-10-10 at 08:14 -0700, Alexander Duyck wrote:quoted
I think you might be coming to this a little late. The igb and ixgbe drivers had been working this way for a long time. We did a memcpy to move the headers from the page and into the skb->data at an aligned offset. In order to determine the length to memcpy we had a function that could walk through the DMA aligned data to get the header length. The function for that was replaced with the __skb_flow_dissect as it was considered a duplication of code with the flow_dissection functions. However that is obviously not the case now that we are hitting these alignment issues. The question I have in all this is do I push forward and make __skb_flow_dissect work with unaligned accesses, or do I back off and put something equivilent to igb/ixgbe_get_headlen functions in the kernel in order to deal with the unaligned accesses as they had no issues with them since they were only concerned with getting the header length and kept all accesses 16b aligned.I see nothing wrong dealing with unaligned accesses, as these helpers are nop on x86 or CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y arches.
Still it means possibly hurting performance on those platforms that don't have it defined. If I just use get_unaligned that is pretty easy in terms of cleanup for the ports and IPv4 addresses, the IPv6 will still be a significant hurdle to overcome though. Thanks, Alex