diff mbox series

net: stmmac: Fix page pool size

Message ID 20190920170127.22850-1-thierry.reding@gmail.com
State Changes Requested
Delegated to: David Miller
Headers show
Series net: stmmac: Fix page pool size | expand

Commit Message

Thierry Reding Sept. 20, 2019, 5:01 p.m. UTC
From: Thierry Reding <treding@nvidia.com>

The size of individual pages in the page pool in given by an order. The
order is the binary logarithm of the number of pages that make up one of
the pages in the pool. However, the driver currently passes the number
of pages rather than the order, so it ends up wasting quite a bit of
memory.

Fix this by taking the binary logarithm and passing that in the order
field.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jakub Kicinski Sept. 22, 2019, 10:31 p.m. UTC | #1
On Fri, 20 Sep 2019 19:01:27 +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
> 
> The size of individual pages in the page pool in given by an order. The
> order is the binary logarithm of the number of pages that make up one of
> the pages in the pool. However, the driver currently passes the number
> of pages rather than the order, so it ends up wasting quite a bit of
> memory.
> 
> Fix this by taking the binary logarithm and passing that in the order
> field.
> 
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Since this is a fix could we get a Fixes tag pointing to the commit
which introduced the regression?
Jose Abreu Sept. 23, 2019, 8:09 a.m. UTC | #2
From: Jakub Kicinski <jakub.kicinski@netronome.com>
Date: Sep/22/2019, 23:31:32 (UTC+00:00)

> On Fri, 20 Sep 2019 19:01:27 +0200, Thierry Reding wrote:
> > From: Thierry Reding <treding@nvidia.com>
> > 
> > The size of individual pages in the page pool in given by an order. The
> > order is the binary logarithm of the number of pages that make up one of
> > the pages in the pool. However, the driver currently passes the number
> > of pages rather than the order, so it ends up wasting quite a bit of
> > memory.
> > 
> > Fix this by taking the binary logarithm and passing that in the order
> > field.
> > 
> > Signed-off-by: Thierry Reding <treding@nvidia.com>
> 
> Since this is a fix could we get a Fixes tag pointing to the commit
> which introduced the regression?

This would be:

2af6106ae949 ("net: stmmac: Introducing support for Page Pool")

Can you please resubmit Thierry ?

---
Thanks,
Jose Miguel Abreu
diff mbox series

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index ecd461207dbc..f8c90dba6db8 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -1550,13 +1550,15 @@  static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv)
 	for (queue = 0; queue < rx_count; queue++) {
 		struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
 		struct page_pool_params pp_params = { 0 };
+		unsigned int num_pages;
 
 		rx_q->queue_index = queue;
 		rx_q->priv_data = priv;
 
 		pp_params.flags = PP_FLAG_DMA_MAP;
 		pp_params.pool_size = DMA_RX_SIZE;
-		pp_params.order = DIV_ROUND_UP(priv->dma_buf_sz, PAGE_SIZE);
+		num_pages = DIV_ROUND_UP(priv->dma_buf_sz, PAGE_SIZE);
+		pp_params.order = ilog2(num_pages);
 		pp_params.nid = dev_to_node(priv->device);
 		pp_params.dev = priv->device;
 		pp_params.dma_dir = DMA_FROM_DEVICE;