From patchwork Thu Feb 9 13:58:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 726146 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 3vK0j020ppz9s2P for ; Fri, 10 Feb 2017 01:25:08 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="tS+0EBif"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752825AbdBIOZB (ORCPT ); Thu, 9 Feb 2017 09:25:01 -0500 Received: from mail-pf0-f173.google.com ([209.85.192.173]:34512 "EHLO mail-pf0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751820AbdBIOY6 (ORCPT ); Thu, 9 Feb 2017 09:24:58 -0500 Received: by mail-pf0-f173.google.com with SMTP id e4so1091572pfg.1 for ; Thu, 09 Feb 2017 06:23:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=VZ5GIiLurMEf5nXZjWTt+1iGuDKATWBu8QlKXVi/rHQ=; b=tS+0EBifbS8TtPu9IPJC16dvWO2vlDb7Hw8Ob+lkOfFijccEanBwBdxGAp+mW9G9hr FNXZxADcNLWg9tKKn/R0CUcqEwG+7ZTtKgmnwxxEocSP4/O3S1e/2xi66MPgw6dIr5It Ueef8Wewx7GCzV7ShZsJqt9+emp0ivxjJKwTm3EIBOIh+7K2pg/1RiLWNY5z5Z4bqBQ4 N8ZOkzaMdVpnpoQoQ7VEraOFMajIz3Onq7Uj8CwML2juwdJVOcwaJEw4Ve9dIGlKH/OA rrozg/895Fwo02RfFuRbpAV/FendHiTfKHq+XXR9HcgYR/2hZb/50zOok4LnVnOjefua xd+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=VZ5GIiLurMEf5nXZjWTt+1iGuDKATWBu8QlKXVi/rHQ=; b=pz3OXM8UoNuY8wSJixf+0Pff97oNVcEIleryGts0MO5//q8jTelcPdHMCkztyXZxw1 1I3ismFbEHvsPzY0L59uaT8z5LuYV449kNsXQCzY30wD4wXSoAh9T2Ew8NtHEZJmyj+O WZMQT6Dl7mWE4EZ/HSEPi52E1Kw6kHNx5HvAiFIrFKFbFbYVigTcniCfXspgRFyTmCUh GIz4NFOcfFwz5YeL7y5WkP1gUUfPAnIDJj9XjdIg8BJEOdml1T7eNXWY0oCahccilsK3 tmCC+R8y2M7Dw8fNMjotyywOfCMNOwFe5bPETxFsDtySpSEDHXPBcXY94r497fzDcK5Y AJ2A== X-Gm-Message-State: AMke39mURKD123LdkHsvf+hJRU5UoECIKpRpB/hqyQFvnM6jnPBjfWL/UhRgC2hdClfQKPX6 X-Received: by 10.98.209.16 with SMTP id z16mr3816992pfg.139.1486648731548; Thu, 09 Feb 2017 05:58:51 -0800 (PST) Received: from localhost ([2620:0:1000:3012:e82b:1a25:9765:74cf]) by smtp.gmail.com with ESMTPSA id d68sm29303287pfj.92.2017.02.09.05.58.50 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Thu, 09 Feb 2017 05:58:50 -0800 (PST) From: Eric Dumazet To: "David S . Miller" Cc: netdev , Tariq Toukan , Martin KaFai Lau , Willem de Bruijn , Jesper Dangaard Brouer , Brenden Blanco , Alexei Starovoitov , Eric Dumazet , Eric Dumazet Subject: [PATCH v2 net-next 04/14] mlx4: get rid of frag_prefix_size Date: Thu, 9 Feb 2017 05:58:28 -0800 Message-Id: <20170209135838.16487-5-edumazet@google.com> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog In-Reply-To: <20170209135838.16487-1-edumazet@google.com> References: <20170209135838.16487-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Using per frag storage for frag_prefix_size is really silly. mlx4_en_complete_rx_desc() has all needed info already. Signed-off-by: Eric Dumazet --- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 27 ++++++++++++--------------- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 3 +-- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index b78d6762e03fc9f0c9e8bfa710efc2e7c86a..118ea83cff089f614a11f99f6623358f2006 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -588,15 +588,14 @@ static int mlx4_en_complete_rx_desc(struct mlx4_en_priv *priv, int length) { struct skb_frag_struct *skb_frags_rx = skb_shinfo(skb)->frags; - struct mlx4_en_frag_info *frag_info; - int nr; + struct mlx4_en_frag_info *frag_info = priv->frag_info; + int nr, frag_size; dma_addr_t dma; /* Collect used fragments while replacing them in the HW descriptors */ - for (nr = 0; nr < priv->num_frags; nr++) { - frag_info = &priv->frag_info[nr]; - if (length <= frag_info->frag_prefix_size) - break; + for (nr = 0;;) { + frag_size = min_t(int, length, frag_info->frag_size); + if (unlikely(!frags[nr].page)) goto fail; @@ -606,15 +605,16 @@ static int mlx4_en_complete_rx_desc(struct mlx4_en_priv *priv, __skb_fill_page_desc(skb, nr, frags[nr].page, frags[nr].page_offset, - frag_info->frag_size); + frag_size); skb->truesize += frag_info->frag_stride; frags[nr].page = NULL; + nr++; + length -= frag_size; + if (!length) + break; + frag_info++; } - /* Adjust size of last fragment to match actual length */ - if (nr > 0) - skb_frag_size_set(&skb_frags_rx[nr - 1], - length - priv->frag_info[nr - 1].frag_prefix_size); return nr; fail: @@ -1197,7 +1197,6 @@ void mlx4_en_calc_rx_buf(struct net_device *dev) if (priv->tx_ring_num[TX_XDP]) { priv->rx_page_order = 0; priv->frag_info[0].frag_size = eff_mtu; - priv->frag_info[0].frag_prefix_size = 0; /* This will gain efficient xdp frame recycling at the * expense of more costly truesize accounting */ @@ -1212,7 +1211,6 @@ void mlx4_en_calc_rx_buf(struct net_device *dev) priv->frag_info[i].frag_size = (eff_mtu > buf_size + frag_sizes[i]) ? frag_sizes[i] : eff_mtu - buf_size; - priv->frag_info[i].frag_prefix_size = buf_size; priv->frag_info[i].frag_stride = ALIGN(priv->frag_info[i].frag_size, SMP_CACHE_BYTES); @@ -1232,10 +1230,9 @@ void mlx4_en_calc_rx_buf(struct net_device *dev) eff_mtu, priv->num_frags); for (i = 0; i < priv->num_frags; i++) { en_err(priv, - " frag:%d - size:%d prefix:%d stride:%d\n", + " frag:%d - size:%d stride:%d\n", i, priv->frag_info[i].frag_size, - priv->frag_info[i].frag_prefix_size, priv->frag_info[i].frag_stride); } } diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index 670eed48cf3c3f6f76e86e077c997d6f8e65..edd0f89fc1a1fdb711b8a8aefb4872fec23a 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h @@ -472,9 +472,8 @@ struct mlx4_en_mc_list { struct mlx4_en_frag_info { u16 frag_size; - u16 frag_prefix_size; - u32 frag_stride; u16 rx_headroom; + u32 frag_stride; }; #ifdef CONFIG_MLX4_EN_DCB