|
@@ -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;
|