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    [W:0.021 / U:61.076 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site