page_pool: Store the XDP mem id
Store the XDP mem ID inside the page_pool struct so it can be retrieved later for use in bpf_prog_run(). Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Link: https://lore.kernel.org/bpf/20220103150812.87914-4-toke@redhat.com
This commit is contained in:
parent
35b2e54989
commit
64693ec777
|
@ -96,6 +96,7 @@ struct page_pool {
|
|||
unsigned int frag_offset;
|
||||
struct page *frag_page;
|
||||
long frag_users;
|
||||
u32 xdp_mem_id;
|
||||
|
||||
/*
|
||||
* Data structure for allocation side
|
||||
|
@ -170,9 +171,12 @@ bool page_pool_return_skb_page(struct page *page);
|
|||
|
||||
struct page_pool *page_pool_create(const struct page_pool_params *params);
|
||||
|
||||
struct xdp_mem_info;
|
||||
|
||||
#ifdef CONFIG_PAGE_POOL
|
||||
void page_pool_destroy(struct page_pool *pool);
|
||||
void page_pool_use_xdp_mem(struct page_pool *pool, void (*disconnect)(void *));
|
||||
void page_pool_use_xdp_mem(struct page_pool *pool, void (*disconnect)(void *),
|
||||
struct xdp_mem_info *mem);
|
||||
void page_pool_release_page(struct page_pool *pool, struct page *page);
|
||||
void page_pool_put_page_bulk(struct page_pool *pool, void **data,
|
||||
int count);
|
||||
|
@ -182,7 +186,8 @@ static inline void page_pool_destroy(struct page_pool *pool)
|
|||
}
|
||||
|
||||
static inline void page_pool_use_xdp_mem(struct page_pool *pool,
|
||||
void (*disconnect)(void *))
|
||||
void (*disconnect)(void *),
|
||||
struct xdp_mem_info *mem)
|
||||
{
|
||||
}
|
||||
static inline void page_pool_release_page(struct page_pool *pool,
|
||||
|
|
|
@ -693,10 +693,12 @@ static void page_pool_release_retry(struct work_struct *wq)
|
|||
schedule_delayed_work(&pool->release_dw, DEFER_TIME);
|
||||
}
|
||||
|
||||
void page_pool_use_xdp_mem(struct page_pool *pool, void (*disconnect)(void *))
|
||||
void page_pool_use_xdp_mem(struct page_pool *pool, void (*disconnect)(void *),
|
||||
struct xdp_mem_info *mem)
|
||||
{
|
||||
refcount_inc(&pool->user_cnt);
|
||||
pool->disconnect = disconnect;
|
||||
pool->xdp_mem_id = mem->id;
|
||||
}
|
||||
|
||||
void page_pool_destroy(struct page_pool *pool)
|
||||
|
|
|
@ -320,7 +320,7 @@ static struct xdp_mem_allocator *__xdp_reg_mem_model(struct xdp_mem_info *mem,
|
|||
}
|
||||
|
||||
if (type == MEM_TYPE_PAGE_POOL)
|
||||
page_pool_use_xdp_mem(allocator, mem_allocator_disconnect);
|
||||
page_pool_use_xdp_mem(allocator, mem_allocator_disconnect, mem);
|
||||
|
||||
mutex_unlock(&mem_id_lock);
|
||||
|
||||
|
|
Loading…
Reference in New Issue