aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/page_pool.h
diff options
context:
space:
mode:
authorJesper Dangaard Brouer <[email protected]>2019-06-18 13:05:37 +0000
committerDavid S. Miller <[email protected]>2019-06-19 15:23:13 +0000
commite54cfd7e1745e52eb6c67ee9c77aefb8e4666a88 (patch)
treebaf9b88f268bb9c2d947b008f3687b8b073ba6f5 /include/net/page_pool.h
parentveth: use xdp_release_frame for XDP_PASS (diff)
downloadkernel-e54cfd7e1745e52eb6c67ee9c77aefb8e4666a88.tar.gz
kernel-e54cfd7e1745e52eb6c67ee9c77aefb8e4666a88.zip
page_pool: introduce page_pool_free and use in mlx5
In case driver fails to register the page_pool with XDP return API (via xdp_rxq_info_reg_mem_model()), then the driver can free the page_pool resources more directly than calling page_pool_destroy(), which does a unnecessarily RCU free procedure. This patch is preparing for removing page_pool_destroy(), from driver invocation. Signed-off-by: Jesper Dangaard Brouer <[email protected]> Reviewed-by: Tariq Toukan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
Diffstat (limited to 'include/net/page_pool.h')
-rw-r--r--include/net/page_pool.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/net/page_pool.h b/include/net/page_pool.h
index e240fac4c5b9..754d980700df 100644
--- a/include/net/page_pool.h
+++ b/include/net/page_pool.h
@@ -111,6 +111,17 @@ struct page_pool *page_pool_create(const struct page_pool_params *params);
void page_pool_destroy(struct page_pool *pool);
+void __page_pool_free(struct page_pool *pool);
+static inline void page_pool_free(struct page_pool *pool)
+{
+ /* When page_pool isn't compiled-in, net/core/xdp.c doesn't
+ * allow registering MEM_TYPE_PAGE_POOL, but shield linker.
+ */
+#ifdef CONFIG_PAGE_POOL
+ __page_pool_free(pool);
+#endif
+}
+
/* Never call this directly, use helpers below */
void __page_pool_put_page(struct page_pool *pool,
struct page *page, bool allow_direct);