On Mon, Sep 23, 2019 at 11:59:15AM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > 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. > > Fixes: 2af6106ae949 ("net: stmmac: Introducing support for Page Pool") > Signed-off-by: Thierry Reding <treding@xxxxxxxxxx> > --- > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) I fumbled the git format-patch incantation. This should've been marked v2. Thierry > 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; > -- > 2.23.0 >
Attachment:
signature.asc
Description: PGP signature