lkml.org 
[lkml]   [2009]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [BUG] 2.6.30-rc4: Kernel BUG under network load with gianfar
From
From: Lennert Buytenhek <buytenh@wantstofly.org>
Date: Wed, 20 May 2009 23:47:34 +0200

> gianfar puts skbuffs that are in the rx ring back onto the recycle
> list if there was a receive error, but this breaks the following
> invariant: that all skbuffs on the recycle list have skb->data =
> skb->head + NET_SKB_PAD (NET_SKB_PAD being 32 for you).
>
> In this case, the skb's ->data will be skb->head + RXBUF_ALIGNMENT
> (where RXBUF_ALIGNMENT is 64) when it is put onto the recycle list.
> And when gfar_new_skb() picks this skb off the recycle list again,
> it'll do:
>
> alignamount = RXBUF_ALIGNMENT -
> (((unsigned long) skb->data) & (RXBUF_ALIGNMENT - 1));
>
> /* We need the data buffer to be aligned properly. We will reserve
> * as many bytes as needed to align the data properly
> */
> skb_reserve(skb, alignamount);
>
> So now skb->data will be skb->head + 128, and there won't be enough
> space between skb->head and skb->end to hold a full-sized packet.
>
> Something like the patch below would fix it.

Let me know when a final, tested, version of this patch is available
and please make sure it makes it to netdev@vger.kernel.org

Thanks.


\
 
 \ /
  Last update: 2009-05-22 00:27    [from the cache]
©2003-2014 Jasper Spaans. Advertise on this site