@@ -26,6 +26,9 @@ struct netdev_rx_queue {
*/
struct napi_struct *napi;
struct netdev_dmabuf_binding *binding;
+
+ const struct memory_provider_ops *pp_ops;
+ void *pp_private;
} ____cacheline_aligned_in_smp;
/*
@@ -2189,7 +2189,7 @@ int netdev_bind_dmabuf_to_queue(struct net_device *dev, u32 rxq_idx,
rxq = __netif_get_rx_queue(dev, rxq_idx);
- if (rxq->binding)
+ if (rxq->binding || rxq->pp_ops)
return -EEXIST;
err = xa_alloc(&binding->bound_rxq_list, &xa_idx, rxq, xa_limit_32b,
@@ -262,6 +262,9 @@ static int page_pool_init(struct page_pool *pool,
if (binding) {
pool->mp_ops = &dmabuf_devmem_ops;
pool->mp_priv = binding;
+ } else if (pool->p.queue && pool->p.queue->pp_ops) {
+ pool->mp_ops = pool->p.queue->pp_ops;
+ pool->mp_priv = pool->p.queue->pp_private;
}
if (pool->mp_ops) {