58 lines
2.3 KiB
Diff
58 lines
2.3 KiB
Diff
From: Eric Dumazet <eric.dumazet@gmail.com>
|
|
Date: Wed, 25 Jan 2012 03:56:30 +0000
|
|
Subject: [PATCH 28/58] be2net: allocate more headroom in incoming skbs
|
|
|
|
commit bb349bb4b19b39830e0486aedfd7c7dca23b7baf upstream.
|
|
|
|
Allocation of 64 bytes in skb headroom is not enough if we have to pull
|
|
ethernet + ipv6 + tcp headers, and/or extra tunneling header.
|
|
|
|
Its currently not noticed because netdev_alloc_skb_ip_align(64) give us
|
|
more room, thanks to power-of-two kmalloc() roundups.
|
|
|
|
Make sure we ask for 128 bytes so that side effects of upcoming patches
|
|
from Ian Campbell dont decrease benet rx performance, because of extra
|
|
skb head reallocations.
|
|
|
|
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
|
|
Cc: Ian Campbell <Ian.Campbell@citrix.com>
|
|
Cc: Vasundhara Volam <vasundhara.volam@emulex.com>
|
|
Cc: Sathya Perla <sathya.perla@emulex.com>
|
|
Cc: Ajit Khaparde <ajit.khaparde@emulex.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/ethernet/emulex/benet/be.h | 3 +++
|
|
drivers/net/ethernet/emulex/benet/be_main.c | 2 +-
|
|
2 files changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
|
|
index cbdec25..453d486 100644
|
|
--- a/drivers/net/ethernet/emulex/benet/be.h
|
|
+++ b/drivers/net/ethernet/emulex/benet/be.h
|
|
@@ -74,6 +74,9 @@ static inline char *nic_name(struct pci_dev *pdev)
|
|
|
|
/* Number of bytes of an RX frame that are copied to skb->data */
|
|
#define BE_HDR_LEN ((u16) 64)
|
|
+/* allocate extra space to allow tunneling decapsulation without head reallocation */
|
|
+#define BE_RX_SKB_ALLOC_SIZE (BE_HDR_LEN + 64)
|
|
+
|
|
#define BE_MAX_JUMBO_FRAME_SIZE 9018
|
|
#define BE_MIN_MTU 256
|
|
|
|
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
|
index adfd66a..860c461 100644
|
|
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
|
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
|
@@ -1181,7 +1181,7 @@ static void be_rx_compl_process(struct be_adapter *adapter,
|
|
struct net_device *netdev = adapter->netdev;
|
|
struct sk_buff *skb;
|
|
|
|
- skb = netdev_alloc_skb_ip_align(netdev, BE_HDR_LEN);
|
|
+ skb = netdev_alloc_skb_ip_align(netdev, BE_RX_SKB_ALLOC_SIZE);
|
|
if (unlikely(!skb)) {
|
|
rx_stats(rxo)->rx_drops_no_skbs++;
|
|
be_rx_compl_discard(adapter, rxo, rxcp);
|
|
--
|
|
1.7.10
|
|
|