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 |
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?
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 --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;