Commit fa516c0d authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

net: devmem: fix DMA direction on unmapping



Looks like we always unmap the DMA_BUF with DMA_FROM_DEVICE direction.
While at it unexport __net_devmem_dmabuf_binding_free(), it's internal.

Found by code inspection.

Fixes: bd618489 ("net: devmem: Implement TX path")
Acked-by: default avatarStanislav Fomichev <sdf@fomichev.me>
Reviewed-by: default avatarMina Almasry <almasrymina@google.com>
Link: https://patch.msgid.link/20250801011335.2267515-1-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2df15804
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -70,14 +70,13 @@ void __net_devmem_dmabuf_binding_free(struct work_struct *wq)
		gen_pool_destroy(binding->chunk_pool);

	dma_buf_unmap_attachment_unlocked(binding->attachment, binding->sgt,
					  DMA_FROM_DEVICE);
					  binding->direction);
	dma_buf_detach(binding->dmabuf, binding->attachment);
	dma_buf_put(binding->dmabuf);
	xa_destroy(&binding->bound_rxqs);
	kvfree(binding->tx_vec);
	kfree(binding);
}
EXPORT_SYMBOL(__net_devmem_dmabuf_binding_free);

struct net_iov *
net_devmem_alloc_dmabuf(struct net_devmem_dmabuf_binding *binding)
@@ -208,6 +207,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
	mutex_init(&binding->lock);

	binding->dmabuf = dmabuf;
	binding->direction = direction;

	binding->attachment = dma_buf_attach(binding->dmabuf, dev->dev.parent);
	if (IS_ERR(binding->attachment)) {
@@ -312,7 +312,7 @@ net_devmem_bind_dmabuf(struct net_device *dev,
	kvfree(binding->tx_vec);
err_unmap:
	dma_buf_unmap_attachment_unlocked(binding->attachment, binding->sgt,
					  DMA_FROM_DEVICE);
					  direction);
err_detach:
	dma_buf_detach(dmabuf, binding->attachment);
err_free_binding:
+3 −4
Original line number Diff line number Diff line
@@ -56,6 +56,9 @@ struct net_devmem_dmabuf_binding {
	 */
	u32 id;

	/* DMA direction, FROM_DEVICE for Rx binding, TO_DEVICE for Tx. */
	enum dma_data_direction direction;

	/* Array of net_iov pointers for this binding, sorted by virtual
	 * address. This array is convenient to map the virtual addresses to
	 * net_iovs in the TX path.
@@ -165,10 +168,6 @@ static inline void net_devmem_put_net_iov(struct net_iov *niov)
{
}

static inline void __net_devmem_dmabuf_binding_free(struct work_struct *wq)
{
}

static inline struct net_devmem_dmabuf_binding *
net_devmem_bind_dmabuf(struct net_device *dev,
		       enum dma_data_direction direction,