lkml.org 
[lkml]   [2023]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH bpf-next v2 3/3] xdp: remove unused {__,}xdp_release_frame()
    Date
    __xdp_build_skb_from_frame() was the last user of
    {__,}xdp_release_frame(), which detaches pages from the page_pool.
    All the consumers now recycle Page Pool skbs and page, except mlx5,
    stmmac and tsnep drivers, which use page_pool_release_page() directly
    (might change one day). It's safe to assume this functionality is not
    needed anymore and can be removed (in favor of recycling).

    Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    ---
    include/net/xdp.h | 29 -----------------------------
    net/core/xdp.c | 15 ---------------
    2 files changed, 44 deletions(-)

    diff --git a/include/net/xdp.h b/include/net/xdp.h
    index d517bfac937b..5393b3ebe56e 100644
    --- a/include/net/xdp.h
    +++ b/include/net/xdp.h
    @@ -317,35 +317,6 @@ void xdp_flush_frame_bulk(struct xdp_frame_bulk *bq);
    void xdp_return_frame_bulk(struct xdp_frame *xdpf,
    struct xdp_frame_bulk *bq);

    -/* When sending xdp_frame into the network stack, then there is no
    - * return point callback, which is needed to release e.g. DMA-mapping
    - * resources with page_pool. Thus, have explicit function to release
    - * frame resources.
    - */
    -void __xdp_release_frame(void *data, struct xdp_mem_info *mem);
    -static inline void xdp_release_frame(struct xdp_frame *xdpf)
    -{
    - struct xdp_mem_info *mem = &xdpf->mem;
    - struct skb_shared_info *sinfo;
    - int i;
    -
    - /* Curr only page_pool needs this */
    - if (mem->type != MEM_TYPE_PAGE_POOL)
    - return;
    -
    - if (likely(!xdp_frame_has_frags(xdpf)))
    - goto out;
    -
    - sinfo = xdp_get_shared_info_from_frame(xdpf);
    - for (i = 0; i < sinfo->nr_frags; i++) {
    - struct page *page = skb_frag_page(&sinfo->frags[i]);
    -
    - __xdp_release_frame(page_address(page), mem);
    - }
    -out:
    - __xdp_release_frame(xdpf->data, mem);
    -}
    -
    static __always_inline unsigned int xdp_get_frame_len(struct xdp_frame *xdpf)
    {
    struct skb_shared_info *sinfo;
    diff --git a/net/core/xdp.c b/net/core/xdp.c
    index a2237cfca8e9..8d3ad315f18d 100644
    --- a/net/core/xdp.c
    +++ b/net/core/xdp.c
    @@ -531,21 +531,6 @@ void xdp_return_buff(struct xdp_buff *xdp)
    }
    EXPORT_SYMBOL_GPL(xdp_return_buff);

    -/* Only called for MEM_TYPE_PAGE_POOL see xdp.h */
    -void __xdp_release_frame(void *data, struct xdp_mem_info *mem)
    -{
    - struct xdp_mem_allocator *xa;
    - struct page *page;
    -
    - rcu_read_lock();
    - xa = rhashtable_lookup(mem_id_ht, &mem->id, mem_id_rht_params);
    - page = virt_to_head_page(data);
    - if (xa)
    - page_pool_release_page(xa->page_pool, page);
    - rcu_read_unlock();
    -}
    -EXPORT_SYMBOL_GPL(__xdp_release_frame);
    -
    void xdp_attachment_setup(struct xdp_attachment_info *info,
    struct netdev_bpf *bpf)
    {
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-03-27 00:43    [W:2.913 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site