From patchwork Mon Feb 13 19:58:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 727553 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 3vMbx31LcZz9ryT for ; Tue, 14 Feb 2017 06:59:35 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="tiX6xmjO"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753122AbdBMT7d (ORCPT ); Mon, 13 Feb 2017 14:59:33 -0500 Received: from mail-oi0-f50.google.com ([209.85.218.50]:33776 "EHLO mail-oi0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753102AbdBMT73 (ORCPT ); Mon, 13 Feb 2017 14:59:29 -0500 Received: by mail-oi0-f50.google.com with SMTP id w204so57421589oiw.0 for ; Mon, 13 Feb 2017 11:59:29 -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=7L2fdn0/iG8Wf2tjdMBfXVzb7GmdQ1fpN05r21o+T7Q=; b=tiX6xmjORHYlf9R40gsSqnEeO4Ry2xQ9nMHZtpes+uWCw2NkiFTZbd0/pTVnDodelS otguvyYVgFiAiSvRZSwlAIbaL42eyqw21CHX6jcMMM6FHLOzC6ozxynX5pw3OkhDpb7B XZKvPDFGCcMoogF2gRPUP/pl9AO93kwHMFv34rz/BEmQYnk/TKp2z9m2Q2D327zSyAw6 xgPKn5JgpBJwunNc6UVfYY+AMTPeG5r3o+nJo2D6hIfIVVzCCwvYpuWPRnn8txPow48c OgL6/alUWQEvUye17VYMGNhdAVopwK+zSXTb4heQNvF/xKhAfD7Cqlrlyzllk52dYrYj Pvaw== 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=7L2fdn0/iG8Wf2tjdMBfXVzb7GmdQ1fpN05r21o+T7Q=; b=otQwUgeCpiBelKGyP5hOmJZqKqW1xAgTG6fq7gaSabUNa0cjQt2J1mS1bvRQE5FYaO J1N5NbWlWUZFLM+ek9PQ1wOI/L0tPw++ySiyjq7XJNKUPLsj012gcsFzSOBn4X9ewZmF g8XRqgHkzhOEOlrc3SUQ4krwAb//2Nr1I3LPF61NeawInMSX2Rsvhp1XjqENMeIrD2n2 qTaK/9g0xzJGXNn++Fd0IsH1/q7sDhMEI2ZF4dFnlbVVGP7eWwR3rkcVd90NY2Oykzve 3g6lcVvcpSxKg1ynf2jtLH3zXjyNLk1LCdA32XLTuSQPHjbF6I3sYw6c33Ax97JMzIUx 7+2Q== X-Gm-Message-State: AMke39mhzrTN3vsz+QcYsLejCgQmMZfKkAmZpTSCclp/+1W8OgYWTjpOoi7ei6M4Se6OETTU X-Received: by 10.84.134.36 with SMTP id 33mr6527658plg.151.1487015968756; Mon, 13 Feb 2017 11:59:28 -0800 (PST) Received: from localhost ([2620:0:1000:3002:ad42:8a39:ab39:a74d]) by smtp.gmail.com with ESMTPSA id y6sm22670065pgc.1.2017.02.13.11.59.27 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 13 Feb 2017 11:59:28 -0800 (PST) From: Eric Dumazet To: "David S . Miller" Cc: netdev , Tariq Toukan , Martin KaFai Lau , Saeed Mahameed , Willem de Bruijn , Jesper Dangaard Brouer , Brenden Blanco , Alexei Starovoitov , Eric Dumazet , Eric Dumazet Subject: [PATCH v3 net-next 06/14] mlx4: reduce rx ring page_cache size Date: Mon, 13 Feb 2017 11:58:50 -0800 Message-Id: <20170213195858.5215-7-edumazet@google.com> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog In-Reply-To: <20170213195858.5215-1-edumazet@google.com> References: <20170213195858.5215-1-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We only need to store the page and dma address. Signed-off-by: Eric Dumazet --- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 17 ++++++++++------- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 -- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 6 +++++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index bb33032a280f00ee62cc39d4261e72543ed0434e..453313d404e3698b0d41a8220005b3834c9d68a1 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -250,7 +250,10 @@ static int mlx4_en_prepare_rx_desc(struct mlx4_en_priv *priv, (index << priv->log_rx_info); if (ring->page_cache.index > 0) { - frags[0] = ring->page_cache.buf[--ring->page_cache.index]; + ring->page_cache.index--; + frags[0].page = ring->page_cache.buf[ring->page_cache.index].page; + frags[0].dma = ring->page_cache.buf[ring->page_cache.index].dma; + frags[0].page_offset = XDP_PACKET_HEADROOM; rx_desc->data[0].addr = cpu_to_be64(frags[0].dma + frags[0].page_offset); return 0; @@ -537,7 +540,9 @@ bool mlx4_en_rx_recycle(struct mlx4_en_rx_ring *ring, if (cache->index >= MLX4_EN_CACHE_SIZE) return false; - cache->buf[cache->index++] = *frame; + cache->buf[cache->index].page = frame->page; + cache->buf[cache->index].dma = frame->dma; + cache->index++; return true; } @@ -567,11 +572,9 @@ void mlx4_en_deactivate_rx_ring(struct mlx4_en_priv *priv, int i; for (i = 0; i < ring->page_cache.index; i++) { - struct mlx4_en_rx_alloc *frame = &ring->page_cache.buf[i]; - - dma_unmap_page(priv->ddev, frame->dma, frame->page_size, - priv->dma_dir); - put_page(frame->page); + dma_unmap_page(priv->ddev, ring->page_cache.buf[i].dma, + PAGE_SIZE, priv->dma_dir); + put_page(ring->page_cache.buf[i].page); } ring->page_cache.index = 0; mlx4_en_free_rx_buf(priv, ring); diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 98bc67a7249b14f8857fe1fd6baa40ae3ec5a880..e0c5ffb3e3a6607456e1f191b0b8c8becfc71219 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c @@ -354,8 +354,6 @@ u32 mlx4_en_recycle_tx_desc(struct mlx4_en_priv *priv, struct mlx4_en_rx_alloc frame = { .page = tx_info->page, .dma = tx_info->map0_dma, - .page_offset = XDP_PACKET_HEADROOM, - .page_size = PAGE_SIZE, }; if (!mlx4_en_rx_recycle(ring->recycle_ring, &frame)) { diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h index 535bf2478d5fe7433b83687e04dedccf127838c7..d92e5228d4248f28151cba117a9485c71ef5b593 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h @@ -267,9 +267,13 @@ struct mlx4_en_rx_alloc { }; #define MLX4_EN_CACHE_SIZE (2 * NAPI_POLL_WEIGHT) + struct mlx4_en_page_cache { u32 index; - struct mlx4_en_rx_alloc buf[MLX4_EN_CACHE_SIZE]; + struct { + struct page *page; + dma_addr_t dma; + } buf[MLX4_EN_CACHE_SIZE]; }; struct mlx4_en_priv;