From 2991543b435692dce2174baafe95c3dc866bdda9 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Thu, 12 Jul 2012 04:19:38 +0000 Subject: [PATCH] --- yaml --- r: 315471 b: refs/heads/master c: 6ecd09dd35fd07b8f2f6f5210ecffd4cc5ac0581 h: refs/heads/master i: 315469: bb9e99e7c17e56bdb1e72fdb6747ce6ee667e8f0 315467: b69d08d0729480214862a78d045e4633c18315c5 315463: fa9538bf5243a617af432799f10265d70ea84e8b 315455: 34addd7ceeff29ff399ad861196b6a545c1daf01 v: v3 --- [refs] | 2 +- trunk/drivers/net/ethernet/faraday/ftgmac100.c | 9 +++++++-- trunk/drivers/net/ethernet/faraday/ftmac100.c | 11 +++++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index d6943353b268..b68061bfa61a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: db8dacf953a70274172236957a4b97d4fdb376f0 +refs/heads/master: 6ecd09dd35fd07b8f2f6f5210ecffd4cc5ac0581 diff --git a/trunk/drivers/net/ethernet/faraday/ftgmac100.c b/trunk/drivers/net/ethernet/faraday/ftgmac100.c index 16b07048274c..74d749e29aab 100644 --- a/trunk/drivers/net/ethernet/faraday/ftgmac100.c +++ b/trunk/drivers/net/ethernet/faraday/ftgmac100.c @@ -479,9 +479,14 @@ static bool ftgmac100_rx_packet(struct ftgmac100 *priv, int *processed) rxdes = ftgmac100_current_rxdes(priv); } while (!done); - if (skb->len <= 64) + /* Small frames are copied into linear part of skb to free one page */ + if (skb->len <= 128) { skb->truesize -= PAGE_SIZE; - __pskb_pull_tail(skb, min(skb->len, 64U)); + __pskb_pull_tail(skb, skb->len); + } else { + /* We pull the minimum amount into linear part */ + __pskb_pull_tail(skb, ETH_HLEN); + } skb->protocol = eth_type_trans(skb, netdev); netdev->stats.rx_packets++; diff --git a/trunk/drivers/net/ethernet/faraday/ftmac100.c b/trunk/drivers/net/ethernet/faraday/ftmac100.c index 829b1092fd78..b901a01e3fa5 100644 --- a/trunk/drivers/net/ethernet/faraday/ftmac100.c +++ b/trunk/drivers/net/ethernet/faraday/ftmac100.c @@ -441,11 +441,14 @@ static bool ftmac100_rx_packet(struct ftmac100 *priv, int *processed) skb->len += length; skb->data_len += length; - /* page might be freed in __pskb_pull_tail() */ - if (length > 64) + if (length > 128) { skb->truesize += PAGE_SIZE; - __pskb_pull_tail(skb, min(length, 64)); - + /* We pull the minimum amount into linear part */ + __pskb_pull_tail(skb, ETH_HLEN); + } else { + /* Small frames are copied into linear part to free one page */ + __pskb_pull_tail(skb, length); + } ftmac100_alloc_rx_page(priv, rxdes, GFP_ATOMIC); ftmac100_rx_pointer_advance(priv);