Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: bd61848900bf ("net: devmem: Implement TX path")
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Reviewed-by: Mina Almasry <almasrymina@google.com>
Link: https://patch.msgid.link/20250801011335.2267515-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+6 -7
+3 -3
net/core/devmem.c
··· 70 70 gen_pool_destroy(binding->chunk_pool); 71 71 72 72 dma_buf_unmap_attachment_unlocked(binding->attachment, binding->sgt, 73 - DMA_FROM_DEVICE); 73 + binding->direction); 74 74 dma_buf_detach(binding->dmabuf, binding->attachment); 75 75 dma_buf_put(binding->dmabuf); 76 76 xa_destroy(&binding->bound_rxqs); 77 77 kvfree(binding->tx_vec); 78 78 kfree(binding); 79 79 } 80 - EXPORT_SYMBOL(__net_devmem_dmabuf_binding_free); 81 80 82 81 struct net_iov * 83 82 net_devmem_alloc_dmabuf(struct net_devmem_dmabuf_binding *binding) ··· 207 208 mutex_init(&binding->lock); 208 209 209 210 binding->dmabuf = dmabuf; 211 + binding->direction = direction; 210 212 211 213 binding->attachment = dma_buf_attach(binding->dmabuf, dev->dev.parent); 212 214 if (IS_ERR(binding->attachment)) { ··· 312 312 kvfree(binding->tx_vec); 313 313 err_unmap: 314 314 dma_buf_unmap_attachment_unlocked(binding->attachment, binding->sgt, 315 - DMA_FROM_DEVICE); 315 + direction); 316 316 err_detach: 317 317 dma_buf_detach(dmabuf, binding->attachment); 318 318 err_free_binding:
+3 -4
net/core/devmem.h
··· 56 56 */ 57 57 u32 id; 58 58 59 + /* DMA direction, FROM_DEVICE for Rx binding, TO_DEVICE for Tx. */ 60 + enum dma_data_direction direction; 61 + 59 62 /* Array of net_iov pointers for this binding, sorted by virtual 60 63 * address. This array is convenient to map the virtual addresses to 61 64 * net_iovs in the TX path. ··· 165 162 } 166 163 167 164 static inline void net_devmem_put_net_iov(struct net_iov *niov) 168 - { 169 - } 170 - 171 - static inline void __net_devmem_dmabuf_binding_free(struct work_struct *wq) 172 165 { 173 166 } 174 167