Skip to content

Commit 07cf71b

Browse files
committed
net: page_pool: add page_pool_get()
There is a page_pool_put() function but no get equivalent. Having multiple references to a page pool is quite useful. It avoids branching in create / destroy paths in drivers which support memory providers. Use the new helper in bnxt. Acked-by: Jesper Dangaard Brouer <[email protected]> Reviewed-by: Dragos Tatulea <[email protected]> Reviewed-by: Mina Almasry <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent ae76e8d commit 07cf71b

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3800,8 +3800,7 @@ static void bnxt_free_rx_rings(struct bnxt *bp)
38003800
xdp_rxq_info_unreg(&rxr->xdp_rxq);
38013801

38023802
page_pool_destroy(rxr->page_pool);
3803-
if (bnxt_separate_head_pool(rxr))
3804-
page_pool_destroy(rxr->head_pool);
3803+
page_pool_destroy(rxr->head_pool);
38053804
rxr->page_pool = rxr->head_pool = NULL;
38063805

38073806
kfree(rxr->rx_agg_bmap);
@@ -3848,6 +3847,8 @@ static int bnxt_alloc_rx_page_pool(struct bnxt *bp,
38483847
pool = page_pool_create(&pp);
38493848
if (IS_ERR(pool))
38503849
goto err_destroy_pp;
3850+
} else {
3851+
page_pool_get(pool);
38513852
}
38523853
rxr->head_pool = pool;
38533854

@@ -15903,8 +15904,7 @@ static int bnxt_queue_mem_alloc(struct net_device *dev, void *qmem, int idx)
1590315904
xdp_rxq_info_unreg(&clone->xdp_rxq);
1590415905
err_page_pool_destroy:
1590515906
page_pool_destroy(clone->page_pool);
15906-
if (bnxt_separate_head_pool(clone))
15907-
page_pool_destroy(clone->head_pool);
15907+
page_pool_destroy(clone->head_pool);
1590815908
clone->page_pool = NULL;
1590915909
clone->head_pool = NULL;
1591015910
return rc;
@@ -15922,8 +15922,7 @@ static void bnxt_queue_mem_free(struct net_device *dev, void *qmem)
1592215922
xdp_rxq_info_unreg(&rxr->xdp_rxq);
1592315923

1592415924
page_pool_destroy(rxr->page_pool);
15925-
if (bnxt_separate_head_pool(rxr))
15926-
page_pool_destroy(rxr->head_pool);
15925+
page_pool_destroy(rxr->head_pool);
1592715926
rxr->page_pool = NULL;
1592815927
rxr->head_pool = NULL;
1592915928

include/net/page_pool/helpers.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,11 @@ page_pool_dma_sync_netmem_for_cpu(const struct page_pool *pool,
489489
offset, dma_sync_size);
490490
}
491491

492+
static inline void page_pool_get(struct page_pool *pool)
493+
{
494+
refcount_inc(&pool->user_cnt);
495+
}
496+
492497
static inline bool page_pool_put(struct page_pool *pool)
493498
{
494499
return refcount_dec_and_test(&pool->user_cnt);

0 commit comments

Comments
 (0)