summaryrefslogtreecommitdiff
path: root/net/core/devmem.c
diff options
context:
space:
mode:
authorDragos Tatulea <dtatulea@nvidia.com>2025-08-27 17:39:57 +0300
committerJakub Kicinski <kuba@kernel.org>2025-08-28 16:05:31 -0700
commit7c7e94603a76d62efbc4da4d0eb7a221add0ecfa (patch)
treebe64993450cf53c3aac3027b009f025fb2823dbd /net/core/devmem.c
parent59b8b32ac8d469958936fcea781c7f58e3d64742 (diff)
net: devmem: get netdev DMA device via new API
Switch to the new API for fetching DMA devices for a netdev. The API is called with queue index 0 for now which is equivalent with the previous behavior. This patch will allow devmem to work with devices where the DMA device is not stored in the parent device. mlx5 SFs are an example of such a device. Multi-PF netdevs are still problematic (as they were before this change). Upcoming patches will address this for the rx binding. Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com> Reviewed-by: Mina Almasry <almasrymina@google.com> Link: https://patch.msgid.link/20250827144017.1529208-5-dtatulea@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/core/devmem.c')
-rw-r--r--net/core/devmem.c10
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");