[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4EF1EC28.90008@monstr.eu>
Date: Wed, 21 Dec 2011 15:24:40 +0100
From: Michal Simek <monstr@...str.eu>
To: Eric Dumazet <eric.dumazet@...il.com>
CC: David Miller <davem@...emloft.net>,
John Williams <john.williams@...alogix.com>,
netdev@...r.kernel.org
Subject: Re: ICMP packets - ll_temac with Microblaze
Eric Dumazet wrote:
> Le mercredi 21 décembre 2011 à 14:28 +0100, Michal Simek a écrit :
>
>> ok. Can you provide me any background why size should be setup by
>> size = SKB_WITH_OVERHEAD(ksize(data));
>> and not to use size which is passed to kmalloc in __alloc_skb.
>
> Its all about memory accounting (based on skb->truesize)
>
> Prior to the patch, we could fool memory accounting because skbs claimed
> to use less memory than what they really used.
>
> And crash machines eventually.
>
> Now memory accouting is fixed, we probably need to change some points in
> the kernel, where we previously accepted a small skb, but not a very
> large one.
>
> Since "ping" probably uses SOCK_RAW sockets, I'll try this one :
>
> (We dont care of _this_ skb truesize, only on the count of previously
> queued packets)
>
>
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index 0da505c..a809a48 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -1631,8 +1631,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
> if (snaplen > res)
> snaplen = res;
>
> - if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
> - (unsigned)sk->sk_rcvbuf)
> + if (atomic_read(&sk->sk_rmem_alloc) >= (unsigned)sk->sk_rcvbuf)
> goto drop_n_acct;
>
> if (skb_shared(skb)) {
> @@ -1763,7 +1762,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
> if (po->tp_version <= TPACKET_V2) {
> if (macoff + snaplen > po->rx_ring.frame_size) {
> if (po->copy_thresh &&
> - atomic_read(&sk->sk_rmem_alloc) + skb->truesize
> + atomic_read(&sk->sk_rmem_alloc)
> < (unsigned)sk->sk_rcvbuf) {
> if (skb_shared(skb)) {
> copy_skb = skb_clone(skb, GFP_ATOMIC);
>
>
>
>
It doesn't work too.
It is possible to see this behavior on qemu. What about if I prepare you package with cross toolchain, rootfs
and you can add debug message where you want?
I have also tried ll_temac driver with ppc440 and behavior is the same.
Max FRAME_SIZE pass to netdev_alloc_skb_ip_align is 7966. For this value ping works.
(For ll_temac driver it is #define XTE_JUMBO_MTU 7948 from ll_temac.h)
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists