From patchwork Thu May 8 12:50:34 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Vadai X-Patchwork-Id: 347030 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5554B1400A3 for ; Thu, 8 May 2014 22:51:09 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754535AbaEHMu6 (ORCPT ); Thu, 8 May 2014 08:50:58 -0400 Received: from mailp.voltaire.com ([193.47.165.129]:54057 "EHLO mellanox.co.il" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1754530AbaEHMuy (ORCPT ); Thu, 8 May 2014 08:50:54 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from amirv@mellanox.com) with SMTP; 8 May 2014 15:50:42 +0300 Received: from mtl-eit-vdi-22.mtl.labs.mlnx (mtl-eit-vdi-22.mtl.labs.mlnx [10.7.132.72]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id s48CofFJ021094; Thu, 8 May 2014 15:50:42 +0300 From: Amir Vadai To: "David S. Miller" Cc: netdev@vger.kernel.org, Amir Vadai , Ido Shamay , Jeff Kirsher , Jesse Brandeburg , Bruce Allan , Carolyn Wyborny , Don Skidmore , Greg Rose , Alex Duyck , John Ronciak , Mitch Williams , Yevgeny Petrilin , Or Gerlitz Subject: [PATCH net-next 2/2] net/mlx4_en: Copy exact header to SKB linear part Date: Thu, 8 May 2014 15:50:34 +0300 Message-Id: <1399553434-25617-3-git-send-email-amirv@mellanox.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1399553434-25617-1-git-send-email-amirv@mellanox.com> References: <1399553434-25617-1-git-send-email-amirv@mellanox.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Shamay When copy received packet header to the linear section of the SKB, Copy the exact header (best effort) and not the max possible header, using the new network helper function __net_get_headlen. It will return the size of the header up to the latest known header. Signed-off-by: Ido Shamay Signed-off-by: Amir Vadai --- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index ba049ae..e8b1787 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -566,6 +566,7 @@ static struct sk_buff *mlx4_en_rx_skb(struct mlx4_en_priv *priv, void *va; int used_frags; dma_addr_t dma; + int hdrlen; skb = netdev_alloc_skb(priv->dev, SMALL_PACKET_SIZE + NET_IP_ALIGN); if (!skb) { @@ -598,15 +599,16 @@ static struct sk_buff *mlx4_en_rx_skb(struct mlx4_en_priv *priv, skb_shinfo(skb)->nr_frags = used_frags; /* Copy headers into the skb linear buffer */ - memcpy(skb->data, va, HEADER_COPY_SIZE); - skb->tail += HEADER_COPY_SIZE; + hdrlen = __net_get_headlen(va, SMALL_PACKET_SIZE); + memcpy(skb->data, va, ALIGN(hdrlen, sizeof(long))); + skb->tail += hdrlen; /* Skip headers in first fragment */ - skb_shinfo(skb)->frags[0].page_offset += HEADER_COPY_SIZE; + skb_shinfo(skb)->frags[0].page_offset += hdrlen; /* Adjust size of first fragment */ - skb_frag_size_sub(&skb_shinfo(skb)->frags[0], HEADER_COPY_SIZE); - skb->data_len = length - HEADER_COPY_SIZE; + skb_frag_size_sub(&skb_shinfo(skb)->frags[0], hdrlen); + skb->data_len = length - hdrlen; } return skb; }