On Fri, 2011-01-07 at 14:46 -0800, Ben Greear wrote: > On 01/07/2011 02:26 PM, Eric Dumazet wrote: > > Le vendredi 07 janvier 2011 Ã 14:20 -0800, Ben Greear a Ãcrit : > >> On 0 > >>> Using skb_copy() is wrong then, since it makes a copy (order-1 > >>> allocations) > >>> > >>> It should use : > >>> skb_alloc( actual_size_of_frame not the 3840 thing ...) > >>> copy(data) > >> > >> We need the extra stuff copied too I think (like skb->cb). > >> > >> If you could provide a bit more complete example code, I'll be happy > >> to test it... > > > > take a random drivers/net using copybreak ... say ... tg3.c > > > > lines 4785 > > > > len = length_of_the_current_frame > > copy_skb = netdev_alloc_skb(..., len); > > // allocates exact required size not a byte more.... > > ... > > skb_copy_from_linear_data(skb, copy_skb->data, len); > > ... > > skb_put(skb, len); > > ... > > That seems fine for drivers, but I'm guessing something different > would be needed in the mac80211/rx.c code: > > I figure doing the fix here might be a nice quick fix, > and would help with all funky drivers. Later, can fix the > ath9k to do the skb copying as soon as DMA is done? This code in mac80211 that you point out will nearly never do a copy unless you have a lot of multicast traffic. I really don't think it makes sense to think about changing that now. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html