diff options
author | Alok Makhariya <B46187@freescale.com> | 2014-03-28 12:49:53 (GMT) |
---|---|---|
committer | Jose Rivera <German.Rivera@freescale.com> | 2014-03-31 18:57:20 (GMT) |
commit | 27b00fec49bde69b30675a32babeae37269e9acd (patch) | |
tree | 938013d7bb7ba9c4c3eedde13e22a1abbe139555 | |
parent | c84ef2f6f53fe3535d28c39246d1499e7aab1388 (diff) | |
download | linux-fsl-qoriq-27b00fec49bde69b30675a32babeae37269e9acd.tar.xz |
gianfar: Allocate extra headroom while allocating skb in gianfar
ASF requires some extra headrom for IPSec processing.
During IPSec processing packet size increases adding
the Outer IP header, ESP header, ICV and Padding to
the packet. In case the headroom/tailroom is not
present copy of packet is made. Reserved that required
extra headroom while allocating the buffer in gianfar,
so that packet copy is avoided
CQ ID : ENGR00304852
Change-Id: I2580bf20fb2acd5a9ced4166375ca22f56f764fe
Signed-off-by: Alok Makhariya <B46187@freescale.com>
Reviewed-on: http://git.am.freescale.net:8181/10356
Reviewed-by: Rajan Gupta <rajan.gupta@freescale.com>
Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com>
Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.h | 8 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 17aca73..471c3ce 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -2589,7 +2589,12 @@ static struct sk_buff *gfar_alloc_skb(struct net_device *dev) struct gfar_private *priv = netdev_priv(dev); struct sk_buff *skb; +#ifndef CONFIG_AS_FASTPATH skb = netdev_alloc_skb(dev, priv->rx_buffer_size + RXBUF_ALIGNMENT); +#else + skb = netdev_alloc_skb(dev, priv->rx_buffer_size + RXBUF_ALIGNMENT + + EXTRA_HEADROOM); +#endif if (!skb) return NULL; diff --git a/drivers/net/ethernet/freescale/gianfar.h b/drivers/net/ethernet/freescale/gianfar.h index 34e5693..44a32ac 100644 --- a/drivers/net/ethernet/freescale/gianfar.h +++ b/drivers/net/ethernet/freescale/gianfar.h @@ -80,6 +80,10 @@ struct ethtool_rx_list { /* Number of bytes to align the rx bufs to */ #define RXBUF_ALIGNMENT 64 +#ifdef CONFIG_AS_FASTPATH +/* Headroom required for IPSec processing in ASF */ +#define EXTRA_HEADROOM 128 +#endif /* The number of bytes which composes a unit for the purpose of * allocating data buffers. ie-for any given MTU, the data buffer * will be the next highest multiple of 512 bytes. */ @@ -1608,6 +1612,10 @@ static inline void gfar_rx_checksum(struct sk_buff *skb, struct rxfcb *fcb) static inline void gfar_align_skb(struct sk_buff *skb) { +#ifdef CONFIG_AS_FASTPATH + /* Reserving the extra headroom required for ASF IPSec processing */ + skb_reserve(skb, EXTRA_HEADROOM); +#endif /* We need the data buffer to be aligned properly. We will reserve * as many bytes as needed to align the data properly */ |