diff options
Diffstat (limited to 'net/core/devmem.c')
-rw-r--r-- | net/core/devmem.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/core/devmem.c b/net/core/devmem.c index 24c591ab38ae..c58b24128727 100644 --- a/net/core/devmem.c +++ b/net/core/devmem.c @@ -182,6 +182,7 @@ net_devmem_bind_dmabuf(struct net_device *dev, { struct net_devmem_dmabuf_binding *binding; static u32 id_alloc_next; + struct device *dma_dev; struct scatterlist *sg; struct dma_buf *dmabuf; unsigned int sg_idx, i; @@ -192,6 +193,13 @@ net_devmem_bind_dmabuf(struct net_device *dev, if (IS_ERR(dmabuf)) return ERR_CAST(dmabuf); + dma_dev = netdev_queue_get_dma_dev(dev, 0); + if (!dma_dev) { + err = -EOPNOTSUPP; + NL_SET_ERR_MSG(extack, "Device doesn't support DMA"); + goto err_put_dmabuf; + } + binding = kzalloc_node(sizeof(*binding), GFP_KERNEL, dev_to_node(&dev->dev)); if (!binding) { @@ -209,7 +217,7 @@ net_devmem_bind_dmabuf(struct net_device *dev, binding->dmabuf = dmabuf; binding->direction = direction; - binding->attachment = dma_buf_attach(binding->dmabuf, dev->dev.parent); + binding->attachment = dma_buf_attach(binding->dmabuf, dma_dev); if (IS_ERR(binding->attachment)) { err = PTR_ERR(binding->attachment); NL_SET_ERR_MSG(extack, "Failed to bind dmabuf to device"); |