Thread (26 messages) read the whole thread 26 messages, 6 authors, 2014-10-13

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help