xdp: export xdp_rxq_info_unreg_mem_model
Export __xdp_rxq_info_unreg_mem_model as xdp_rxq_info_unreg_mem_model, so it can be used from netdev drivers. Also, add additional checks for the memory type. Signed-off-by: Björn Töpel <bjorn.topel@intel.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>hifive-unleashed-5.1
parent
b0d1beeff2
commit
dce5bd6140
|
@ -136,6 +136,7 @@ void xdp_rxq_info_unused(struct xdp_rxq_info *xdp_rxq);
|
||||||
bool xdp_rxq_info_is_reg(struct xdp_rxq_info *xdp_rxq);
|
bool xdp_rxq_info_is_reg(struct xdp_rxq_info *xdp_rxq);
|
||||||
int xdp_rxq_info_reg_mem_model(struct xdp_rxq_info *xdp_rxq,
|
int xdp_rxq_info_reg_mem_model(struct xdp_rxq_info *xdp_rxq,
|
||||||
enum xdp_mem_type type, void *allocator);
|
enum xdp_mem_type type, void *allocator);
|
||||||
|
void xdp_rxq_info_unreg_mem_model(struct xdp_rxq_info *xdp_rxq);
|
||||||
|
|
||||||
/* Drivers not supporting XDP metadata can use this helper, which
|
/* Drivers not supporting XDP metadata can use this helper, which
|
||||||
* rejects any room expansion for metadata as a result.
|
* rejects any room expansion for metadata as a result.
|
||||||
|
|
|
@ -94,11 +94,21 @@ static void __xdp_mem_allocator_rcu_free(struct rcu_head *rcu)
|
||||||
kfree(xa);
|
kfree(xa);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __xdp_rxq_info_unreg_mem_model(struct xdp_rxq_info *xdp_rxq)
|
void xdp_rxq_info_unreg_mem_model(struct xdp_rxq_info *xdp_rxq)
|
||||||
{
|
{
|
||||||
struct xdp_mem_allocator *xa;
|
struct xdp_mem_allocator *xa;
|
||||||
int id = xdp_rxq->mem.id;
|
int id = xdp_rxq->mem.id;
|
||||||
|
|
||||||
|
if (xdp_rxq->reg_state != REG_STATE_REGISTERED) {
|
||||||
|
WARN(1, "Missing register, driver bug");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xdp_rxq->mem.type != MEM_TYPE_PAGE_POOL &&
|
||||||
|
xdp_rxq->mem.type != MEM_TYPE_ZERO_COPY) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -110,6 +120,7 @@ static void __xdp_rxq_info_unreg_mem_model(struct xdp_rxq_info *xdp_rxq)
|
||||||
|
|
||||||
mutex_unlock(&mem_id_lock);
|
mutex_unlock(&mem_id_lock);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(xdp_rxq_info_unreg_mem_model);
|
||||||
|
|
||||||
void xdp_rxq_info_unreg(struct xdp_rxq_info *xdp_rxq)
|
void xdp_rxq_info_unreg(struct xdp_rxq_info *xdp_rxq)
|
||||||
{
|
{
|
||||||
|
@ -119,7 +130,7 @@ void xdp_rxq_info_unreg(struct xdp_rxq_info *xdp_rxq)
|
||||||
|
|
||||||
WARN(!(xdp_rxq->reg_state == REG_STATE_REGISTERED), "Driver BUG");
|
WARN(!(xdp_rxq->reg_state == REG_STATE_REGISTERED), "Driver BUG");
|
||||||
|
|
||||||
__xdp_rxq_info_unreg_mem_model(xdp_rxq);
|
xdp_rxq_info_unreg_mem_model(xdp_rxq);
|
||||||
|
|
||||||
xdp_rxq->reg_state = REG_STATE_UNREGISTERED;
|
xdp_rxq->reg_state = REG_STATE_UNREGISTERED;
|
||||||
xdp_rxq->dev = NULL;
|
xdp_rxq->dev = NULL;
|
||||||
|
|
Loading…
Reference in New Issue